Lineárna regresia
Tento poznámkový blok nadväzuje na obsah lekcie o lineárnej regresii. V ňom sa môžete pokúsiť vyriešiť úlohu určovania cien nehnuteľností na základe štvorcových metrov.
Najprv načítajte knižnice, ktoré budeme potrebovať pri ďalšej práci.
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(37)
Teraz vykonajte nasledujúcu bunku na vygenerovanie množiny údajov nehnuteľností. Informácia o štvorcových záberoch je reprezentovaná premennou x, zatiaľ čo informácia o ich cenách je reprezentovaná premennou 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])
Vykonaním nasledujúcej bunky získate grafické znázornenie bodov v množine údajov.
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
plt.show()

V ďalšej bunke je funkcia, ktorá nakreslí čiaru, ktorú si vyberiete vo cvičení. Hneď pod ním je funkcia, ktorá nakreslí čiaru, ktorú si vyberiete, a čiary, ktoré označujú vaše chyby. Môže to byť pre vás užitočné pri hľadaní najlepších hodnôt parametrov. Hneď pod ním je funkcia, ktorá nakreslí čiaru, ktorú si vyberiete, a čiary, ktoré označujú vaše chyby. Môže sa vám to hodiť pri hľadaní najlepších hodnôt parametrov.
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()
Teraz skúste vybrať parametre \(\beta_0\) a \(\beta_1\): vyberte ich hodnoty na jazdci na pravej strane a potom spustite bunku, aby ste videli výsledok. Musíte si vybrať dvojicu parametrov, ktoré podľa vás najlepšie zodpovedajú dostupným údajom. Počiatočné hodnoty parametrov sú \(\beta_0=3,84\) a \(\beta_1=0,62\).
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

Do bunky nižšie musíte zadať hodnoty parametrov \(\beta_0\) a \(\beta_1\), ktoré ste vybrali, a potom vykonať bunku s volaním funkcie 'draw_graph_with_errors', ktorá vám ukáže chyby. Ak si myslíte, že môžete robiť lepšie rozhodnutia, vráťte sa k predchádzajúcemu kroku.
beta_0_selected = 3.84
beta_1_selected = 0.62
draw_graph_with_errors(beta_0_selected, beta_1_selected)

Chybová funkcia spojená s lineárnym regresným modelom sa nazýva stredná štvorcová chyba. Nasledujúca funkcia vám môže pomôcť vypočítať strednú štvorcovú chybu pre váš výber parametrov.
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)
Pri výpočte strednej druhej mocniny chyby sme sa spoliehali na vlastnosť knižnice "numpy", ktorá nám umožňuje aplikovať funkcie na vektory hodnôt. Pomocou príkazu 'y_predictions = beta_0 + beta_1*x' sme teda vypočítali predikčné hodnoty pre všetky x naraz. Podobne s odčítaním "individual_errors = y - y_predictions" pri výpočte jednotlivých rozdielov a ich kvadratúre "individual_errors**2". Týmto spôsobom je kód čitateľnejší a čo je dôležitejšie, rýchlejšie sa počíta. To je pre nás cenné kvôli práci s veľkým množstvom údajov. Samozrejme môžete napísať aj vlastnú funkciu na výpočet strednej druhej mocniny chyby pre zvolené hodnoty parametrov \(\beta_0\) a \(\beta_1\). Pripomíname, že sa vypočítava pomocou vzorca \(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