У меня есть вопрос из задания:
Реализация линейной регрессии (? = ?T ?) для ? = sin (2??) + ? с использованием нормальных уравнений и нанесение на тот же рисунок данных ипрямая линия в результате вашей посадки.(Не забудьте включить термин «перехват».)
Что я сделал
Я использую приведенный ниже код для генерации данных
# Generate synthetic data for ? = sin(2??) + ?
import numpy as np
import math
import random
m = 100 # number of training examples
e = 0.0008 * np.asarray(random.sample(range(0,1000),m)) # random noise
x = np.arange(-1, 1, 2 / m) # x-axis
y = np.sin(2 * np.pi * x) + e # y-axis
#print(x)
#print(y)
иследующее для нахождения наилучшей тэты и прогноза (значение y)
# normal equation --> theta_best = (x.T . x)^(-1) . xT . y
x_b = np.c_[np.ones((m, 1)), x] # set bias term to 1 for each sample
theta_best = np.linalg.inv(x_b.T.dot(x_b)).dot(x_b.T).dot(y)
#print(theta_best)
# ? = ?T . ?
test_x = np.array([[0], [2]])
test_x_b = np.c_[np.ones((2, 1)), test_x]
prediction = test_x_b.dot(theta_best.T)
#print(prediction)
наконец следующее для построения графика данных
plt.plot(test_x, prediction, "r-")
plt.plot(x, y, "b.")
ниже - это результирующий график с данными и линией
Мои вопросы
- Что помнит, чтобы включить термин «перехват» и как я могу его включить?
- Несмотря на то, что я очень новичок в этой области, результирующее прогнозирование для меня выглядит крайне плохо, я делаю что-то не так с реализацией нормальной функции?
Буду очень признателен за любые советы или рекомендации.