Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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:

  1. výpočet sklonu křivky $m = \frac{nE(xy) - E(x)E(y)}{nE(x^2)-E^2(x)}$
  2. výpočet konstanty $c = y - m\cdot x$
  3. 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 (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)

courses/b0b37nsi/addons/01.txt · Last modified: 2022/04/11 11:49 by viteks