Search
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:
Metodu si vyzkoušíme na datovém souboru, který obsahuje věk, pohlací, objem hlavy a váhu mozku (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)