Font size
  • A-
  • A
  • A+
Site color
  • R
  • A
  • A
  • A
Skip to main content
AI4VET AI4VET
  • Home
  • Calendar
  • More
You are currently using guest access
Log in
AI4VET
Home Calendar
Expand all Collapse all
  1. AI/ML Fundamentals
  2. AIML-SR
  3. 3. Modeli učenja (SR)
  4. Vežba 5.1: Linearna regresija

Vežba 5.1: Linearna regresija

Linearna regresija

Open In Colab

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()
 
 
Oprobaj se sada sa izborom parametara \(\beta_0\) i \(\beta_1\): njihovu vrednost odaberi na slajderu sa desne strane, a potom izvrši ćeliju da vidiš rezultat. Treba da odabereš par parametara koji po tvom mišljenju najbolje odgovaraju raspoloživim podacima. Početne vrednosti parametara su \(\beta_0=3.84\) i \(\beta_1=0.62\)
In [31]:
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
 
 
Completion requirements:
  • Make a submission
Previous activity 3.12 Regularizacija
Next activity Vežba 5.2: Gradijentni spust
You are currently using guest access (Log in)
Data retention summary
Get the mobile app
Get the mobile app
Play Store App Store
Powered by Moodle

This theme was proudly developed by

Conecti.me