Linearna regresija
Ova sveska prati sadržaj lekcije o linearnoj regresiji. U njoj možeš da se oprobaš u rešavanju zadatka određivanja cene nekretnina na osnovu kvadratura.
Učitaj prvo biblioteke koje će nam trebati u daljem radu.
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(37)
Sada izvrši sledeću ćeliju da bi generisao skup podataka o nekretninama. Informacije o kvadraturama su predstavljene promenljivom x dok su informacije o njihovim cenama predstavljene promenljivom y.
x = np.array([43, 25, 66, 80, 105, 70, 40, 85, 84, 102])
y = np.array([60, 32.1, 88.4, 111.4, 120.32, 72.1, 46.3, 90.1, 99.6, 139.2])
Izvrši i sledeću ćeliju da bi dobio grafički prikaz tačaka u skupu.
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
plt.show()

U sledećoj ćeliji se nalazi funkcija koja će iscrtavati pravu koju odabereš u vežbi. Odmah ispod nje je i funkcija koja iscrtava pravu koju odabereš i linijice koje označavaju tvoje greške. Možda će ti biti od koristi prilikom traženja najboljih vrednosti parametara.
def draw_graph(beta_0, beta_1):
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
model_x = np.linspace(20, 120, 100)
model_y = beta_0 + beta_1*model_x
plt.plot(model_x, model_y, color='red')
plt.show()
def draw_graph_with_errors(beta_0, beta_1):
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
model_x = np.linspace(20, 120, 100)
model_y = beta_0 + beta_1*model_x
plt.plot(model_x, model_y, color='red')
for i in range(0, 10):
prediction = beta_0 + beta_1*x[i]
if prediction > y[i]:
ymin = y[i]
ymax = prediction
else:
ymin = prediction
ymax = y[i]
plt.vlines(x=x[i], ymin=ymin, ymax=ymax, colors='blue', linestyles='dotted')
plt.show()
beta_0 = 3.84 #@param {type:"slider", min:-1, max:15, step:0.01}
beta_1 = 0.62 #@param {type:"slider", min:-2, max:4, step:0.01}
print("Odabrani model: y = {beta_0} + {beta_1}*x".format(beta_0=beta_0, beta_1=beta_1))
draw_graph(beta_0, beta_1)
Odabrani model: y = 3.84 + 0.62*x

U donju ćeliju treba da uneseš vrednosti parametara \(\beta_0\) i \(\beta_1\) za koje si se odlučio, a potom i da izvršiš ćeliju sa pozivom funkcije `draw_graph_with_errors` koja će ti prikazati greške. Ako misliš da možeš da napraviš bolje izbore, vrati se na prethodni korak.
beta_0_selected = 3.84
beta_1_selected = 0.62
draw_graph_with_errors(beta_0_selected, beta_1_selected)

Funkcija greške koja se pridružuje modelu linearne regresije zove se ` srenjekvadratna greška ` (engl.mean squared error). Sledeća funkcija ti može pomoći da izračunaš srednjekvadratnu grešku za svoj izbor parametara.
def calculate_mean_squared_error(beta_0, beta_1, x, y):
y_predictions = beta_0 + beta_1 * x
individual_errors = y - y_predictions
return np.average(individual_errors**2)
calculate_mean_squared_error(beta_0_selected, beta_1_selected, x, y)
Out[ ]:
np.float64(1810.21888)
Prilikom iračunavanja srednjekvadratne greške oslonili smo se na svojstvo biblioteke ` numpy ` da funkcije možemo da primenjujemo nad vektorima vrednosti. Tako smo naredbom y_predictions = beta_0 + beta_1*x` izračunali vrednost predikcija za sve x-ove odjednom. Slično je i sa oduzimanjem `individual_errors = y - y_predictions` kod računanja pojedinačnih razlika i njihovim kvadriranjem `individual_errors**2`. Na ovaj način je kod pregledniji i, što je važnije, brže se izračunava. Zbog rada sa velikim količinama podataka ovo nam je dragoceno. Naravno , možeš da napišeš i svoju funkciju za računanje srednjekvadratne greške za odabrane vrednosti parametara \(\beta_0\) i \(\beta_1\). Podsetnik je da se ona računa po formuli \(MSE = \frac{1}{n}\sum_{i=1}^{n}{(y_i-(\beta_0 + \beta_1x_i))^2}\).
def my_function_to_calculate_mean_squared_error(beta_0, beta_1, x, y):
pass
- Make a submission