Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (1) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (2) https://github.com/legacyworld/sklearn-basic
Der Youtube-Kommentar ist 4. (1) pro 40 Minuten Erstellen Sie 30 Trainingsdaten mit einem Fehler von $ N (0,1) \ times0.1 $ für $ y = \ cos (1.5 \ pi x) $ und führen Sie eine Polypoly-Regression durch. Die Kreuzungsüberprüfung erfolgt von hier aus. Es kehrt in der Reihenfolge von der 1. bis zur 20. Bestellung zurück. Dies sind die Trainingsdaten.
Quellcode
python:Homework_3.2.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 = 20
def true_f(x):
return np.cos(1.5 * x * np.pi)
np.random.seed(0)
n_samples = 30
#X-Achsdaten zum Zeichnen
x_plot = np.linspace(0,1,100)
#Trainingsdaten
x_tr = np.sort(np.random.rand(n_samples))
y_tr = true_f(x_tr) + np.random.randn(n_samples) * 0.1
#In Matrix konvertieren
X_tr = x_tr.reshape(-1,1)
X_plot = x_plot.reshape(-1,1)
for degree in range(1,DEGREE+1):
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"{degree}.png "
pf = PF(degree=degree,include_bias=False)
linear_reg = linear_model.LinearRegression()
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} TrainErr: {mse:.2e} TestErr: {-scores.mean():.2e}(+/- {scores.std():.2e})")
plt.legend()
plt.savefig(filename)
plt.clf()
In der vorherigen Aufgabe 3.1 habe ich $ x, x ^ 2, x ^ 3 $ usw. in Polynom-Features vorbereitet und dann die lineare Regression durchgeführt, aber ich habe gelernt, dass dies mithilfe der Pipeline auf einmal möglich ist. Als ich den Quellcode im Erklärungsvideo von Ausgabe 3.1 tatsächlich sah, verwendete ich Pipeline. Es gibt nichts Schwieriges, listen Sie einfach den Verarbeitungsinhalt mit "Schritten" auf.
steps = [("Polynomial_Features",pf),("Linear_Regression",linear_reg)]
pipeline = Pipeline(steps=steps)
pipeline.fit(X_tr,y_tr)
Abgesehen von diesem Teil besteht der Unterschied zu Aufgabe 3.1 darin, dass eine Gegenüberstellung enthalten ist. Dieser Teil im Programm.
scores = cross_val_score(pipeline,X_tr,y_tr,scoring="neg_mean_squared_error",cv=10)
Nach dem Teilen der Daten in 10 mit "cv = 10" wird ein Teil als Testdaten verwendet, um den Testfehler zu bewerten. Grundsätzlich ist der mit einem kleinen Testfehler hervorragend. Wenn das Programm ausgeführt wird, werden 20 Diagrammdateien bis 1.png-20.png erstellt.
Daraus können wir erkennen, wie schlecht Überlernen ist.
Recommended Posts