Невзвешенная линейная регрессия с использованием нормального уравнения - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть вопрос из задания:

Реализация линейной регрессии (? = ?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.")

ниже - это результирующий график с данными и линией enter image description here

Мои вопросы

  1. Что помнит, чтобы включить термин «перехват» и как я могу его включить?
  2. Несмотря на то, что я очень новичок в этой области, результирующее прогнозирование для меня выглядит крайне плохо, я делаю что-то не так с реализацией нормальной функции?

Буду очень признателен за любые советы или рекомендации.

...