Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (1) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (2) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (3) https://github.com/legacyworld/sklearn-basic
Au fait, cette fois, c'est le retour de la crête.
Il semble n'y avoir aucune explication pour Youtube, mais certains résultats sont d'environ 9 minutes et 45 secondes dans le 4ème (1).
Le code source est presque le même que celui de la tâche 3.2.
Dans cette tâche, la commande est fixée à 30.
Au lieu de cela, déplacez le paramètre de régularisation avec [1e-30,1e-20,1e-10,1e-5, 1e-3,1e-2,1e-1, 1,10,100]
.
Dans le code source, le paramètre de régularisation est «alpha». Parce que «lambda» de Python est réservé.
python:Homework_3.4.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures as PF
from sklearn import linear_model
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import cross_val_score
DEGREE = 30
def true_f(x):
return np.cos(1.5 * x * np.pi)
np.random.seed(0)
n_samples = 30
#Données de l'axe X pour le dessin
x_plot = np.linspace(0,1,100)
#Données d'entraînement
x_tr = np.sort(np.random.rand(n_samples))
y_tr = true_f(x_tr) + np.random.randn(n_samples) * 0.1
#Convertir en matrice
X_tr = x_tr.reshape(-1,1)
X_plot = x_plot.reshape(-1,1)
degree = DEGREE
alpha_list = [1e-30,1e-20,1e-10,1e-5, 1e-3,1e-2,1e-1, 1,10,100]
for alpha in alpha_list:
plt.scatter(x_tr,y_tr,label="Training Samples")
plt.plot(x_plot,true_f(x_plot),label="True")
plt.xlim(0,1)
plt.ylim(-2,2)
filename = f"{alpha}.png "
pf = PF(degree=degree,include_bias=False)
linear_reg = linear_model.Ridge(alpha=alpha)
steps = [("Polynomial_Features",pf),("Linear_Regression",linear_reg)]
pipeline = Pipeline(steps=steps)
pipeline.fit(X_tr,y_tr)
plt.plot(x_plot,pipeline.predict(X_plot),label="Model")
y_predict = pipeline.predict(X_tr)
mse = mean_squared_error(y_tr,y_predict)
scores = cross_val_score(pipeline,X_tr,y_tr,scoring="neg_mean_squared_error",cv=10)
plt.title(f"Degree: {degree}, Lambda: {alpha}\nTrainErr: {mse:.2e} TestErr: {-scores.mean():.2e}(+/- {scores.std():.2e})")
plt.legend()
plt.savefig(filename)
plt.clf()
print(f"Paramètres de régularisation= {alpha},Erreur d'entraînement= {mse},Erreur de test= {-scores.mean():.2e}")
Ce qui change
linear_reg = linear_model.Ridge(alpha=alpha)
Seulement. Lorsque j'exécute ce programme, j'obtiens l'avertissement suivant.
/usr/local/lib64/python3.6/site-packages/sklearn/linear_model/_ridge.py:190: UserWarning: Singular matrix in solving dual problem. Using least-squares solution instead.
warnings.warn("Singular matrix in solving dual problem. Using "
Cela semble sortir à la place du démontage de Kolesky, mais je n'étais pas sûr.
linear_model/ridge.py
try:
# Note: we must use overwrite_a=False in order to be able to
# use the fall-back solution below in case a LinAlgError
# is raised
dual_coef = linalg.solve(K, y, sym_pos=True,overwrite_a=False)
except np.linalg.LinAlgError:
warnings.warn("Singular matrix in solving dual problem. Using "
"least-squares solution instead.")
dual_coef = linalg.lstsq(K, y)[0]
Il semble que les équations simultanées ne peuvent pas être résolues, donc la méthode du carré minimum sera utilisée ...
Je n'ai pas compris la raison pour laquelle il est sorti uniquement avec 1e-30,1e-20
.
Résultat d'exécution
Paramètres de régularisation= 1e-30,Erreur d'entraînement= 0.002139325105436034,Erreur de test= 5.11e+02
Paramètres de régularisation= 1e-20,Erreur d'entraînement= 0.004936191193133389,Erreur de test= 5.11e+02
Paramètres de régularisation= 1e-10,Erreur d'entraînement= 0.009762751388489265,Erreur de test= 1.44e+02
Paramètres de régularisation= 1e-05,Erreur d'entraînement= 0.01059565315043209,Erreur de test= 2.79e-01
Paramètres de régularisation= 0.001,Erreur d'entraînement= 0.010856091742299396,Erreur de test= 6.89e-02
Paramètres de régularisation= 0.01,Erreur d'entraînement= 0.012046102850453813,Erreur de test= 7.79e-02
Paramètres de régularisation= 0.1,Erreur d'entraînement= 0.02351033489834412,Erreur de test= 4.94e-02
Paramètres de régularisation= 1,Erreur d'entraînement= 0.11886509938269865,Erreur de test= 2.26e-01
Paramètres de régularisation= 10,Erreur d'entraînement= 0.31077333649742883,Erreur de test= 4.71e-01
Paramètres de régularisation= 100,Erreur d'entraînement= 0.41104732329314453,Erreur de test= 5.20e-01
Erreur d'entraînement minimale --Paramètre de régularisation = 1e-30
Erreur de test minimale --Paramètre de régularisation = 0,1
Dans l'explication, 0,01 est le meilleur, mais dans ce programme, 0,1 avait une erreur de test plus petite.
Si la régularisation est trop efficace, elle ne prendra que la moyenne, et si elle n'est pas efficace, elle sera surapprise. Par conséquent, même dans la régression des crêtes, une vérification croisée est nécessaire pour régler les paramètres de régularisation.
Recommended Posts