===== Metoda nejmenších čtverců ===== Metoda nejmenších čtverců je základní metodou regresní analýzy. Poskytuje lineární aproximaci číselné řady, popsanou rovnicí $y=mx + c$ Kroky výpočtu: - výpočet sklonu křivky $m = \frac{nE(xy) - E(x)E(y)}{nE(x^2)-E^2(x)}$ - výpočet konstanty $c = y - m\cdot x$ - určení bodů křivky ==== Příklad ==== Metodu si vyzkoušíme na datovém souboru, který obsahuje věk, pohlací, objem hlavy a váhu mozku ({{ :courses:b0b37nsi:tutorials:headbrain.zip |}}). V příkladu budeme zkoumat vztah mezi velikostí hlavy a váhou mozku. import numpy as np import pandas as pd import matplotlib.pyplot as plt Načtení dat data = pd.read_csv('headbrain.csv') # nezavisle promenne X = data['Head Size(cm^3)'].values Y = data['Brain Weight(grams)'].values Vektory středních hodnot: # Mean X and Y mean_x = np.mean(X) mean_y = np.mean(Y) # Total number of values n = len(X) Parametry lineárního fitu numer = 0 denom = 0 for i in range(n): numer += (X[i] - mean_x) * (Y[i] - mean_y) denom += (X[i] - mean_x) ** 2 m = numer / denom c = mean_y - (m * mean_x) # koeficienty print(m, c) Vykreslení max_x = np.max(X) + 100 min_x = np.min(X) - 100 # [x, y] x = np.linspace(min_x, max_x, 1000) y = c + m * x # vykresleni cary plt.plot(x, y, color='#58b970', label='Regression Line') # jednotlive body plt.scatter(X, Y, c='#ef5423', label='Scatter Plot') plt.xlabel('Head Size in cm3') plt.ylabel('Brain Weight in grams') plt.legend() plt.show() Vyhodnocení kvality fitu - RMSE rmse = 0 for i in range(n): y_pred = c + m * X[i] rmse += (Y[i] - y_pred) ** 2 rmse = np.sqrt(rmse/n) print(rmse)