04. Generalizace polynomického modelu¶
Cvičení:¶
Zhodnoťte vliv velikosti trénovacích dat na generalizaci modelu.
Vyhodnoťte vliv šumu v datech na generalizaci modelu.
Zobecněte polynomický model zjednodušením od vysokého stupně (přístup shora dolů).
In [ ]:
Copied!
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
np.random.seed(0)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
np.random.seed(0)
Data¶
In [ ]:
Copied!
# Generování dat
def fun(x, noise):
"""Základní funkce"""
return .6 * np.sin(x*6) + x + (x ** .8) * noise
def train_test_data(n_samples, noise_factor):
"""Generování"""
# train
np.random.seed(0)
X_train = np.sort(np.random.rand(n_samples))
noise_train = np.random.rand(n_samples) * noise_factor
y_train = fun(X_train, noise_train)
X_train = X_train.reshape(-1, 1)
# test
X_test = np.sort(np.random.rand(n_samples))
noise_test = np.random.rand(n_samples) * noise_factor
y_test = fun(X_test, noise_test)
X_test = X_test.reshape(-1, 1)
return X_train, y_train, X_test, y_test
# Generování dat
def fun(x, noise):
"""Základní funkce"""
return .6 * np.sin(x*6) + x + (x ** .8) * noise
def train_test_data(n_samples, noise_factor):
"""Generování"""
# train
np.random.seed(0)
X_train = np.sort(np.random.rand(n_samples))
noise_train = np.random.rand(n_samples) * noise_factor
y_train = fun(X_train, noise_train)
X_train = X_train.reshape(-1, 1)
# test
X_test = np.sort(np.random.rand(n_samples))
noise_test = np.random.rand(n_samples) * noise_factor
y_test = fun(X_test, noise_test)
X_test = X_test.reshape(-1, 1)
return X_train, y_train, X_test, y_test
In [ ]:
Copied!
# Příprava dat
n_samples = 10
noise_factor = 0.9
X_train, y_train, X_test, y_test = train_test_data(n_samples, noise_factor)
# Příprava dat
n_samples = 10
noise_factor = 0.9
X_train, y_train, X_test, y_test = train_test_data(n_samples, noise_factor)
In [ ]:
Copied!
# Základní funkce
X_fun = np.linspace(0, 1, 100)
noise_fun = np.ones(100) / 2. * noise_factor
y_fun = fun(X_fun, noise_fun)
# Základní funkce
X_fun = np.linspace(0, 1, 100)
noise_fun = np.ones(100) / 2. * noise_factor
y_fun = fun(X_fun, noise_fun)
In [ ]:
Copied!
# Vykreslete základní funkci
pass
# Vykreslete základní funkci
pass
In [ ]:
Copied!
# Parametrizujte polynomický model (stupeň = 10)
pass
# Parametrizujte polynomický model (stupeň = 10)
pass
In [ ]:
Copied!
# Vyhodnoťte přesnost trénování modelu
pass
# Vyhodnoťte přesnost trénování modelu
pass
In [ ]:
Copied!
# Generalizační chyba
pass
# Generalizační chyba
pass
In [ ]:
Copied!
# Vykreslete model
pass
# Vykreslete model
pass
Cvičení 1: Vyhodnocení vlivu velikosti dat na zobecnění modelu¶
- Zvyšte parametr
n_samples
z 10 na 50, 100, 200 a 500. - Jaký vliv má velikost trénovacích dat na výkonnost jeho modelu při použití modelu vyššího stupně, než je potřeba?
- Jak důležité je mít dostatek vzorků?
In [ ]:
Copied!
# doporučení: vytvořte funkci která parametrizuje poly model
# na základě trénovacích vstupů a definice stupňe polynomu
# a vrací model, poly_features, a výsledky evaluace modelu
def train_evaluate_poly(X_train, y_train, X_test, y_test, deg):
"""Trénování a testování polynomického modelu"""
pass
# doporučení: vytvořte funkci která parametrizuje poly model
# na základě trénovacích vstupů a definice stupňe polynomu
# a vrací model, poly_features, a výsledky evaluace modelu
def train_evaluate_poly(X_train, y_train, X_test, y_test, deg):
"""Trénování a testování polynomického modelu"""
pass
In [ ]:
Copied!
noise_factor = 0.9
deg = 10
n_samples = 500
pass
noise_factor = 0.9
deg = 10
n_samples = 500
pass
In [ ]:
Copied!
# Vykreslete model
pass
# Vykreslete model
pass
Cvičení 2: Vyhodnocení vlivu šumu na zobecnění modelu¶
- Snížení parametru šumu
noise_factor
z 0,9 na 0,5 a 0,1 - Jaký vliv má šum v trénovacích datech na zobecnění modelu?
- Dále zvyšte parametr
n_samples
z na 200 a ponechtenoise_factor
na hodnotě 10 % = 0,1. Jak vypadá model?
In [ ]:
Copied!
noise_factor = 0.1
deg = 10
n_samples = 20
pass
noise_factor = 0.1
deg = 10
n_samples = 20
pass
In [ ]:
Copied!
# Vykreslete model
pass
# Vykreslete model
pass
Cvičení 3: Zjednodušení modelu pro lepší generalizaci¶
- Snižte stupeň polynomu modelu
degree
z 10 na vhodnou hodnotu, aby se minimalizoval rozdíl mezi testovacím a trénovacím modelem. Aby byl model dobře generalizován.
In [1]:
Copied!
noise_factor = 0.5
deg = 4
n_samples = 30
pass
noise_factor = 0.5
deg = 4
n_samples = 30
pass
In [2]:
Copied!
# Vykreslete výsledek
# Vykreslete výsledek