Океанские волны (синусоидальная) регрессия

Изучение синусоидальной волны как математической кривой в Python

Определение :

Синусоидальная волна или синусоидальная волна - это математическая кривая, описывающая плавные периодические колебания. Синусоидальная волна - это непрерывная волна, она колеблется от 0 до 360 градусов.

Синусоидальная функция определяется как,

период синусоидальной кривой - это длина одного цикла кривой. Натуральный период синусоидальной кривой равен 2π. Таким образом, коэффициент при b = 1 эквивалентен периоду, равному 2π. Чтобы получить период синусоидальной кривой для любого коэффициента B, просто разделите 2π на коэффициент b, чтобы получить новый период кривой.

Реальное применение синусоидальной функции:

(1) Генерация музыкальных волн.

(2) Звук распространяется волнами.

(3) Тригонометрические функции в конструкциях.

(4) Используется в космических полетах.

(5) Расчет местоположения по GPS.

(6) Архитектура.

(7) Электрический ток.

(8) Радиовещание.

(9) Приливы и отливы в океане.

(10) Здания.

Теперь я покажу вам различные виды синусоидальных волн, которые можно сгенерировать, изменяя их параметры. Моя конечная цель - показать вам, как изменение параметров влияет на форму графика. После этого я возьму пример, который покажет, как мы можем реализовать синусоидальную регрессию в Python.

Прежде всего, мы собираемся взглянуть на различные графики синусоидальных волн, изменяя значения параметров.

Зачем мы собираемся это делать?

Как мы знаем, визуализация данных играет важную роль в науке о данных. При работе с данными (регрессия) нам нужно найти для них наиболее подходящую кривую. Для этого у нас будет много параметров в нашей функции. Если мы не знаем, что происходит, когда мы изменяем эти параметры, то пройти через это будет утомительно, верно? Итак, здесь мы рассмотрим примеры, чтобы понять, что происходит, когда мы меняем значения параметров.

Как это понимать?

Мы возьмем нашу основную синусоидальную функцию, а затем изменим значения параметров, после чего появится график для ее визуализации. Я хочу, чтобы вы взяли ручку и бумагу и попытались построить синусоидальный график, просматривая примеры. Думаю, это поможет вам лучше понять.

Давайте посмотрим на разные синусоидальные графики! ☀️

Пример: 1

Y = 1 * Sin (1 (X + 0)) + 0
Y = SinX
A = 1
B = 1
C = 0
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы можем видеть, что синусоидальная волна имеет амплитуду 1, а длина цикла синусоидальной волны составляет от 0 до 2pi.

Пример 2:

Y = 2 * Sin (1 (X + 0)) + 0
Y = 2SinX
A = 2
B = 1
C = 0
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы можем видеть, что синусоидальная волна имеет амплитуду 2. Как мы видим, она увеличивает высоту нашей синусоидальной волны. Длина цикла синусоидальной волны составляет от 0 до 2 пикселей.

Пример 3:

Y = 1 * Sin (2 (X + 0)) + 0
Y = Sin2X
A = 1
B = 2
C = 0
D = 0
Период = 2 * пи / 2 = пи

Здесь мы видим, что синусоидальная волна имеет амплитуду 1. Длина цикла синусоидальной волны изменяется от 0 до пи.

Пример 4:

Y = 2 * Sin (2 (X + 0)) + 0
Y = 2Sin2X
A = 2
B = 2
C = 0
D = 0
Период = 2 * пи / 2 = пи

Здесь мы видим, что синусоидальная волна имеет амплитуду 2. Длина цикла синусоидальной волны изменяется от 0 до пи. Как мы видим на графике, высота волны увеличилась, а цикл завершился в точке «пи».

Пример 5:

Y = 2 * Sin (1 (X + 1)) + 0
Y = 2Sin (X + 1)
A = 2
B = 1
C = 1 (Shift влево)
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы сместили нашу кривую влево на 1. Мы приняли значение амплитуды равным 1. Обратите внимание, что здесь у нас есть период 2 * пи. Это означает, что один цикл имеет длину 2 * пи. Поскольку мы сдвинули его влево на одну единицу, первый цикл будет сдвинут на 1 единицу влево от 2pi.

Пример 6:

Y = 2 * Sin (1 (X-1)) + 0
Y = 2Sin (X-1)
A = 2
B = 1
C = -1 ( Сдвиг вправо)
Период = 2 * пи / 1 = 2 * пи

Здесь мы сдвинули нашу кривую вправо на 1. Мы взяли значение амплитуды равным 1. Обратите внимание, что здесь у нас есть период 2 * пи. Это означает, что один цикл имеет длину 2 * пи. Поскольку мы сдвинули его вправо на одну единицу, первый цикл будет сдвинут на 1 единицу вправо от 2pi.

Пример 7:

Y = 1 * Sin (1 (X + 0)) + 2
Y = SinX +2
A = 1
B = 1
C = 0
D = 2
Период = 2 * пи / 1 = 2 * пи

Обратите внимание, что мы сместили нашу кривую на 2 точки по положительной оси Y. Амплитуда кривой равна 1. Период, как вы можете видеть, также равен 2 * пи.

Пример 8:

Y = 1 * Sin (1 (X + 0)) - 2
Y = SinX - 2
A = 1
B = 1
C = 0
D = -2
Период = 2 * пи / 1 = 2 * пи

Обратите внимание, что мы сместили нашу кривую на 2 точки по отрицательной оси Y. Амплитуда кривой равна 1. Период, как вы можете видеть, также равен 2 * пи.

Пример 9:

Y = -1 * Sin (1 (X + 0)) + 0
Y = -SinX
A = -1
B = 1
C = 0
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы изменили значение амплитуды на -1. Из иллюстрации выше мы видим, что наш график инвертирован по сравнению с предыдущей версией, имеющей амплитуду 1. Это означает, что положительная ось Y заменена отрицательной осью Y.

Пример 10:

Y = -2 * Sin (1 (X + 0)) + 0
Y = -2SinX
A = -2
B = 1
C = 0
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы собираемся установить значение амплитуды на -2. Это похоже на наш предыдущий график, но высота синусоиды увеличена. Также обратите внимание, что период синусоиды равен 2 * пи.

Пример 11:

Y = -2 * Sin (1 (X-1)) + 0
Y = -2Sin (X-1)
A = -2
B = 1
C = -1
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы сместили кривую вправо на 1 пункт, а также изменили значение амплитуды на -1. Период синусоиды равен 2 * пи.

Пример 12:

Y = -2 * Sin (1 (X + 1)) + 0
Y = -2Sin (X + 1)
A = -2
B = 1
C = 1
D = 0
Период = 2 * пи / 1 = 2 * пи

Здесь мы сместили кривую влево на 1 пункт, а также изменили значение амплитуды на -1. Итак, сначала он перейдет на отрицательную ось Y. Период синусоиды равен 2 * пи.

Пример 13:

Y = 2 * Sin (-1 (X + 1)) + 0
Y = 2Sin (-1 (X + 1))
A = 2
B = -1
C = 1
D = 0
Период = 2 * пи / -1 = -2 * пи

Здесь мы сместили кривую влево на 1 единицу. Следует отметить, что, поскольку у нас период -2 * пи, наш график идет влево или, можно сказать, на отрицательную ось абсцисс. Когда у нас есть положительное значение периода, он переходит к положительной оси абсцисс.

Пример: 14

Y = -2 * Sin (-1 (X-1)) + 0
Y = -2Sin (-1 (X-1))
A = -2
B = -1
C = -1
D = 0
Период = 2 * пи / -1 = -2 * пи

Здесь мы сместили кривую вправо на 1 единицу. Следует отметить, что, поскольку у нас период -2 * пи, наш график идет влево или, можно сказать, на отрицательную ось абсцисс.

Пример 15:

Y = 1 * Sin (1 (X + 1)) + 1
Y = 1 * Sin (X + 1) + 1
A = 1
B = 1
C = 1
D = 1
Период = 2 * пи / 1 = 2 * пи

Здесь у нас есть значение амплитуды, равное 1, и мы также сдвинули кривую влево на 1 единицу. Обратите внимание, что период нашей кривой равен 2 * пи. Еще одна вещь, на которую следует обратить внимание, - это то, что мы сместили нашу кривую на 1 по положительной оси y.

Пример 16:

Y = -1 * Sin (-1 (X-1)) - 1
A = -1
B = -1
C = -1
D = -1 < br /> Период = 2 * пи / -1 = -2 * пи

Здесь у нас есть значение амплитуды -1, и мы также сдвинули кривую вправо на 1 единицу. Обратите внимание, что период нашей кривой равен -2 * пи. Так что сначала он пойдет налево. Еще одна вещь, на которую следует обратить внимание, это то, что мы сместили нашу кривую на 1 по отрицательной оси y.

Давайте код:

(1) Импортируйте необходимые библиотеки:

Здесь мы собираемся импортировать четыре библиотеки.

  • numpy: для расчетов.
  • matplotlib: для построения нашего набора данных и кривых.
  • curve_fit: чтобы найти оптимальные значения параметров для нашей синусоидальной кривой.
  • r2_score: для расчета точности нашей модели.
# Import required libraries :
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit  # For curve fitting
from sklearn.metrics import r2_score  # To check accuracy

(2) Создать набор данных:

Поскольку у нас нет фактического набора данных, представляющего шаблон синусоидальной волны, мы собираемся создать свой собственный набор данных.

Здесь мы собираемся использовать функцию linspace, чтобы получить значение X. Для значения Y мы будем использовать 2 * pi * X. Теперь наш реальный набор данных не будет точно соответствовать шаблону с момента, верно? В наборе данных будет некоторый шум. Мы также собираемся добавить немного шума в наш набор данных, чтобы он выглядел более реалистично!

После этого мы просто собираемся разбросать точки X, Y на плоскости. Таким образом мы можем визуализировать созданный набор данных.

# Generating dataset :
# Y = A*sin(B(X + C)) + D
# A = Amplitude
# Period = 2*pi/0B
# Period = Length of One Cycle
# C = Phase Shift (In Radian)
# D = Vertical Shift
X = np.linspace(0,1,100) #(Start,End,Points)
# Here…
# A = 1
# B= 2*pi
# B = 2*pi/Period
# Period = 1
# C = 0
# D = 0
Y = 1*np.sin(2*np.pi*X)
# Adding some Noise :
Noise = 0.4*np.random.normal(size=100)
Y_data = Y + Noise
plt.scatter(X,Y_data,c=”r”)

(3) Поиск наиболее подходящей линии для нашего набора данных:

Здесь я собираюсь показать вам, как мы можем подогнать «линию регрессии» к нашему набору данных. Здесь мы вычислим ошибку, а в следующей части построим синусоидальную кривую, которая наилучшим образом соответствует нашему набору данных. По точности обеих моделей мы можем быть уверены, почему в этом случае следует использовать синусоидальную регрессию.

# Function to calculate the value :
def calc_line(X,m,b):
 return b + X*m
# It returns optimized parameters for our function :
# popt stores optimal parameters
# pcov stores the covariance between each parameters.
popt,pcov = curve_fit(calc_line,X,Y_data)
# Plot the main data :
plt.scatter(X,Y_data)
# Plot the best fit line :
plt.plot(X,calc_line(X,*popt),c=”r”)
# Check the accuracy of model :
Accuracy =r2_score(Y_data,calc_line(X,*popt))
print (“Accuracy of Linear Model : “,Accuracy)

Обратите внимание, что для нашего набора данных, который соответствует синусоидальному шаблону, мы нашли для него наиболее подходящую линию. Также обратите внимание, что точность нашей модели составляет всего около 40%. Итак, здесь мы можем заключить, что для наборов данных, которые следуют синусоидальному шаблону, если мы используем простую линейную регрессию, мы не можем достичь более высокой точности. Вот причина использования синусоидальной регрессии.

(4) Нахождение оптимальной синусоидальной кривой, соответствующей нашим данным:

Пришло время найти для этого наиболее подходящую кривую. Здесь мы видим, что наши данные соответствуют синусоидальному шаблону. Итак, мы собираемся найти оптимальные параметры, используя метод curve_fit для синусоидальной волны. После этого мы построим данные с наиболее подходящей кривой для ее визуализации.

# Calculate the value :
def calc_sine(x,a,b,c,d):
 return a * np.sin(b* ( x + np.radians(c))) + d
# Finding optimal parameters :
popt,pcov = curve_fit(calc_sine,X,Y_data)
# Plot the main data :
plt.scatter(X,Y_data)
# Plot the best fit curve :
plt.plot(X,calc_sine(X,*popt),c=”r”)
# Check the accuracy :
Accuracy =r2_score(Y_data,calc_sine(X,*popt))
print (Accuracy)

Обратите внимание, что наша наиболее подходящая кривая имеет форму синусоидальной волны. Также обратите внимание, что точность нашей модели увеличилась примерно до 79%. Итак, мы можем заключить, что синусоидальная регрессия помогла нам добиться более высокой точности.

Собираем все вместе:

Хорошо. Так что я думаю, что это покрывает почти все, что нам понадобится в машинном обучении на синусоидальных волнах. Если вам понравилось это читать, то, пожалуйста, нажмите значок хлопка, это побудит меня написать такие исчерпывающие статьи о различных алгоритмах машинного обучения.

Спасибо, что прочитали эту статью. Надеюсь, это помогло!

Я регулярно публикую свои статьи на сайте: patrickstar0110.blogspot.com

Все мои статьи доступны по адресу: medium.com/@shuklapratik22

Если у вас есть сомнения, напишите мне: [email protected]