1

Разбирая статьи с хабра https://habr.com/ru/company/ods/blog/322076/ https://habr.com/ru/company/ods/blog/323890/ возникли вопросы

Есть функция y=sin2x+1.5

В Python есть массив значений пар переменных x и y по данной функции с шумом

На основании значений массива переменных x и y хочу аппроксимировать функцию y=sin(w*x)+b Т.е. мне нужно подобрать значения коэффициентов функции а точнее параметры w и b через МНК (метод наименьших квадратов) для этого беру частные производные делаю систему уравнений и приравниваю 0 Как дорешать данную систему уравнений и подобрать коэффициенты?

Частные производные

Переменные аргумента x и функции y

  • Отредактировал пост, не понимаю как решить данную систему уравнений – Yaroslav Volkonskiy Nov 13 '20 at 16:11
  • Судя по всему система аналитическими методами не решается, нужно снова через приближенные методы искать решения. – EzikBro Nov 13 '20 at 16:33
  • Например? Градиентный спукск? – Yaroslav Volkonskiy Nov 13 '20 at 16:37

1 Answers1

1

Используем замену переменных. z= sin2x. Получаем линейное уравнение и работаете с ним по МНК, так как это описано в любом учебнике по статистике. Получив ур-ние регресси делаем обратное преобразование.

Градиентный спуск в данном случае - из пушки по воробьям. Можно, но зачем? Его имеет смысл применять когда либо функция преобразования неизвестна, либо когда она очень сложная.

Решение по аналитическому выражению:

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0, 6,600)
z=np.sin(2*x)
y=z+1.5+np.random.normal(0,0.1,size=600)
plt.scatter(x,y)
numerator=np.sum((z-np.mean(z))*(y-np.mean(y)))
denominator=np.sum((z-np.mean(z))**2)
b1=numerator/denominator
b0=np.mean(y)-b1*np.mean(z)
y_pred=b0+b1*z
plt.plot(x,y_pred, c='r', lw=4)

Получаем:

b0=1.5027653096440527
b1=0.9961296416892985

введите сюда описание изображения

passant
  • 11,753
  • Функция sin(w*x) yt не получится заменой решить z= sin2x – Yaroslav Volkonskiy Nov 13 '20 at 22:34
  • @Yaroslav Volkonskiy см. пример. – passant Nov 14 '20 at 12:32
  • Да, решение хорошее, скорее всего, будет близко к оптимальному и на практике такой подход очень часто применяется. Но, строго говоря, решение не оптимальное в смысле МНК. – Alex Alex Mar 13 '23 at 03:15