Апроксимація

Апроксима́ція — наближене вираження будь-яких величин (або геометричних/математичних об'єктів) через інші, більш відомі (близькі за значенням) або більш прості величини.

Якщо здається трішки складним, то це через те, що цей термін абстрактний і в нього можна запхати дуже багато математичних методів. Апроксимація це буквально - наближення.

Коли у вас є певний набір даних і ви хочете побачити закономірність між цими даними, наприклад функцію, яка їх описує, то саме для цього і використовується апроксимація. У нас є експериментальні дані і ми хочемо знайти функцію, яка їх породила, або описати її.

Інтерполяція і екстраполяція є методами апроксимації.

Інтерполяція

Інтерполяція — в обчислювальній математиці спосіб знаходження проміжних значень величини за наявним дискретним набором відомих значень.

Інтерполяція для множини x = [1, 3] буде [1, 2, 3]. Між 1 і 3 шукається середнє значення.

Інтерполяція

Інтерполяція по своїй природі є апроксимацією, адже вона дозволяє відтворити функцію на основі певних даних, а вирізняєї її від інших апроксимацій те, що результуюча функція повинна проходити через точки, які інтерполюються, тобто в інтерполяції ми шукаємо значення всередині.

Інтерполяція не завжди лінійна, вона може бути кубічною, або сферично лінійною.

Екстраполяція

Екстраполяція - це статистичний та математичний метод, який використовується для передбачення значень за межами вже відомого діапазону даних. У сутності, це означає застосування вже відомих даних або залежностей для розрахунку значень за межами цих даних.

Зрозуміло, що екстраполяція протилежна за значенням до інтерполяції, якщо в інтерполяції ми шукаємо значення всередині отриманих даних, то в екстраполяції ми хочемо знайти значення за межами відомого діапазону.

Зверніть увагу на префікс обох слів, інтер (між) та екстра (назовні/поза межами)

Загалом будь-який математичний метод суть якого полягає в передбаченні майбутніх даних можна назвати екстраполяцією.

Екстраполяція

Екстраполяція також буває не тільки лінійною. Вона може бути: поліноміальною, експоненційною і так дальше.

Прикалад на Python

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.linspace(0, 10, 20)
y = np.sin(x) + np.random.normal(0, 0.2, 20)

f_linear = interpolate.interp1d(x, y, kind='linear')

f_cubic = interpolate.interp1d(x, y, kind='cubic')

f_extrap = interpolate.interp1d(x, y, kind='linear', fill_value='extrapolate')

x_interp = np.linspace(0, 10, 100)
y_linear_interp = f_linear(x_interp)
y_cubic_interp = f_cubic(x_interp)

x_extrap = np.linspace(-2, 12, 100) 
y_extrap = f_extrap(x_extrap)

plt.figure(figsize=(12, 8))
plt.plot(x, y, 'o', label='Випадкові дані')
plt.plot(x_interp, y_linear_interp, '-', label='Лінійна інтерполяція', color='blue')
plt.plot(x_interp, y_cubic_interp, '--', label='Кубічна інтерполяція', color='green')
plt.plot(x_extrap, y_extrap, '-.', label='Екстраполяція', color='red')
plt.legend()
plt.title('Інтерполяція та Екстраполяція випадкових даних')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.show()

У цьому прикладі використовується лінійна та кубічна інтерполяція та екстраполяція випадково згенерованих даних на базі синусоїди з шумом.

y = np.sin(x) + np.random.normal(0, 0.2, 20)

Екстраполяція проходить по діапазону всієї оригінальної функції і також розширює його новими даними. Діапазон екстраполяції [-2; 12], хоч оригінальна функція [0, 10], тобто діапазон даних для інтерполяції входить в діапазон даних для екстраполяції.

Це змушує нас подивитись на природу використання цих термінів, обидва підходи можуть використовувати однакову функцію для визначення нових даних, але інтерполяція обмежує себе діапазоном оригінальної функції, а екстраполяція бере діапазон оригінальної функції та ще й його розширює.

Ось прикладний спосіб використання апроксимації. Тут прогнозується зміна температури, використовуючи метод поліноміальної регресії на основі історичних даних.

Я вважаю надлишковим тут розглядати ще й методи регресії, тому виділю колись на це окремий пост.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

days = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
temperatures = np.array([20, 22, 21, 25, 30, 32, 36, 33, 31, 28])

days = days.reshape(-1, 1)

degree = 2
model = make_pipeline(PolynomialFeatures(degree), LinearRegression())

model.fit(days, temperatures)

next_day = np.array([[10]])
predicted_temperature = model.predict(next_day)

plt.scatter(days, temperatures, color='blue', label='Первинні дані')
plt.plot(days, model.predict(days), color='red', label=f'Поліноміальна регресія')
plt.scatter(next_day, predicted_temperature, color='green', marker='*', s=200, label='Передбачення на десятий день')
plt.xlabel('Дні')
plt.ylabel('Температура (°C)')
plt.title('Поліноміальна регресія для передбачення температури')
plt.legend()
plt.grid(True)
plt.show()

На прогнозування даних сильно впливає кількість історичної інформації та метод, який використовується. Важливо вміти підібрати правильний метод.

Для чого використовувати апроксимацію?

У багатьох випадках реальні процеси та фізичні явища можуть бути дуже складними для моделювання або розуміння. Апроксимація дозволяє створювати спрощені моделі для наближення цих процесів, що робить їх більш зрозумілими та керованими. Приємно бачити, коли все іде так, як ви цього очукуєте.

Апроксимація може бути використана для передбачення майбутніх значень на основі вже відомих даних. Це корисно у фінансах, економіці, метеорології та інших галузях, де важливо робити прогнози, наприклад гемблери люблять робити прогнози на футбольні матчі.

Також вона може використовуватися для створення математичних моделей, які можна використовувати для симуляції та вивчення складних систем.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Yaroslav Kutsela
Yaroslav Kutsela@penrose

Java Software Engineer

5.3KПрочитань
1Автори
70Читачі
На Друкарні з 26 квітня

Більше від автора

  • Stack та Heap

    В JVM використовуються дві структури для зберігання інформації в пам’яті: Stack та Heap. Вони мають полярну філософію і ми не можемо обійтись без жодної із них. У цьому пості я намагатимусь обширно опрацювати причини використання обох структур та їхні особливості.

    Теми цього довгочиту:

    Java
  • Рівні ізоляції транзакцій у БД

    Доволі детальний огляд аномалій у БД, рівнів ізоляції, які дозволяються уникнути аномалії, та імплементації цих рівнів. Багато використовую джерела та свої коментарі, в кінці декілька чит-шитів.

    Теми цього довгочиту:

    Бази Даних
  • Функціональна залежність у БД

    Пост про функціональну залежність в реляційних множинах. Визначення. Повторення значень в атрибуті. Приклад з п'ятьма атрибутами. Тривіальна залежність. Замикання. залежностей та атрибутів. Незвідні множини. Використання

    Теми цього довгочиту:

    Програмування

Вам також сподобається

Коментарі (9)

гадаю, точно слід зазначити, що як інтерполяція так і екстраполяція бувають різними.

наскільки я зрозумів, автор статті робить акцент на лінійних інтерполяціях та екстраполяціях — розширеннях набору даних у припущенні, що вони розподілені лінійно.

у якості іншого виду інтерполярції можна навести сплайни та криві Безьє.

У якості ще одного прикладу, можна навести оцінку гальмівного шляху автомобіля: хто добре вчив фізику або має достатній водійський досвід — розуміє, що безпечна дистанція, яку треба тримати від інших ТЗ залежить від швидкості зовсім не лінійно. Екстраполяція тут до того, що ми не тримаємо у голові якусь формулу, аби це рахувати, а пам’ятаємо лише декілька образів, таких собі “точок“, що задаю для нас ту формулу.

Вам також сподобається