Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python à la tâche (2)

Continuation depuis la dernière fois Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (1) https://github.com/legacyworld/sklearn-basic

Défi 3.1 Erreur quadratique de la régression polypoly

Il s'agit d'un problème de création de données d'apprentissage avec une erreur de $ N (0,1) \ times0.1 $ sur $ y = \ sin (x) $ et de les retirer avec un polynôme. Le commentaire est le 3e (1) toutes les 56 minutes et 40 secondes

python:Homework_3.1.py


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import copy
from sklearn.preprocessing import PolynomialFeatures as PF
from sklearn import linear_model
from sklearn.metrics import mean_squared_error
#Nombre de données d'entraînement
NUM_TR = 6
np.random.seed(0)
rng = np.random.RandomState(0)

#Données de l'axe X pour le dessin
x_plot = np.linspace(0,10,100)
#Données d'entraînement
tmp = copy.deepcopy(x_plot)
rng.shuffle(tmp)
x_tr = np.sort(tmp[:NUM_TR])
y_tr = np.sin(x_tr) + 0.1*np.random.randn(NUM_TR)

#Convertir en matrice
X_tr = x_tr.reshape(-1,1)
X_plot = x_plot.reshape(-1,1)

#Données pour le polypoly
#Déterminer la commande
degree = 1
pf = PF(degree=degree)
X_poly = pf.fit_transform(X_tr)
X_plot_poly = pf.fit_transform(X_plot)

model = linear_model.LinearRegression()
model.fit(X_poly,y_tr)
fig = plt.figure()
plt.scatter(x_tr,y_tr,label="training Samples")
plt.plot(x_plot,model.predict(X_plot_poly),label=f"degree = {degree}")
plt.legend()
plt.ylim(-2,2)
fig.savefig(f"{degree}.png ")

#Données pour le polypoly
#Tous les ordres
fig = plt.figure()
plt.scatter(x_tr,y_tr,label="Training Samples")

for degree in range(1,NUM_TR):
    pf = PF(degree=degree)
    X_poly = pf.fit_transform(X_tr)
    X_plot_poly = pf.fit_transform(X_plot)
    model = linear_model.LinearRegression()
    model.fit(X_poly,y_tr)
    plt.plot(x_plot,model.predict(X_plot_poly),label=f"degree {degree}")
    plt.legend()
    mse = mean_squared_error(y_tr,model.predict(X_poly))
    print(f"degree = {degree} mse = {mse}")

plt.xlim(0,10)
plt.ylim(-2,2)
fig.savefig('all_degree.png')

Nous avons préparé deux données (x_tr) pour calculer la régression et une pour dessiner le graphique ( x_plot). Si vous faites simplement x_tr = x_plot, les données réelles ne seront pas copiées. Si vous le faites tel quel, le nombre de données de dessin sera également NUM_TR dans la partie de x_tr = np.sort (tmp [: NUM_TR]), et le dessin du graphe sera étrange. J'utilise donc deepcopy.

Les données originales sont préparées en divisant 0-10 en 100 parties égales. Seul NUM_TR est sélectionné au hasard pour les données d'entraînement (6 dans le cours) Par erreur, le nombre aléatoire généré entre 0-1 multiplié par 1/10 est ajouté à sin (x_tr). Puisque la graine est fixée au début, le même résultat est obtenu quel que soit le nombre de fois qu'il est exécuté dans n'importe quel environnement. Ce sont les données préparées training.png

Ce qui est différent du passé, c'est la partie appelée Caractéristiques polynomiales. C'est la partie qui prépare les données d'entraînement telles que $ x, x ^ 2, x ^ 3, x ^ 4 $ pour l'ordre du polypole. Par exemple, si la commande = 3, c'est le cas.

degree = 3
pf = PF(degree=degree)
X_poly = pf.fit_transform(X_tr)
print(f"degree = {degree}\nX_Tr = {X_tr}\nX_poly = {X_poly}")

Le résultat de l'exécution est

degree = 3
X_Tr = [[0.2020202 ]
 [2.62626263]
 [5.55555556]
 [7.57575758]
 [8.68686869]
 [9.39393939]]
X_poly = [[1.00000000e+00 2.02020202e-01 4.08121620e-02 8.24488122e-03]
 [1.00000000e+00 2.62626263e+00 6.89725538e+00 1.81140040e+01]
 [1.00000000e+00 5.55555556e+00 3.08641975e+01 1.71467764e+02]
 [1.00000000e+00 7.57575758e+00 5.73921028e+01 4.34788658e+02]
 [1.00000000e+00 8.68686869e+00 7.54616876e+01 6.55525771e+02]
 [1.00000000e+00 9.39393939e+00 8.82460973e+01 8.28978490e+02]]

Dans les premières données, les données d'entraînement d'origine sont $ x = 2.020202 \ times10 ^ {-1} $ et $ x ^ 2 = 4.08 \ times10 ^ {-2} $. Le fait est que $ x ^ 2 et x ^ 3 $ sont traités comme des quantités d'entités différentes.

Ensuite, revenons dans le premier ordre (ligne droite). Le résultat est le suivant. 1.png

Enfin, changez l'ordre de 1 à 5 et dessinez chacun sur le graphique. all_degree.png

Telle est l'erreur. Les nombres ne correspondaient pas par degré = 5.

degree = 1 mse = 0.33075005001856256
degree = 2 mse = 0.3252271169458752
degree = 3 mse = 0.30290034474812344
degree = 4 mse = 0.010086018410257538
degree = 5 mse = 3.1604543144050787e-22

Recommended Posts

Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (17)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en créant le script Python faisant partie du devoir (5)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (16)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (10)
Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python à la tâche (2)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (13)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (9)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (4)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (12)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (1)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (11)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (3)
Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python à la tâche (14)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en créant le script Python faisant partie du devoir (6)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (15)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (7) Créez votre propre méthode de descente la plus raide
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (8) Créez votre propre méthode de descente stochastique la plus raide
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Résumé du flux de base de l'apprentissage automatique avec Python
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
[Livre d'images sur l'apprentissage automatique] Mémo lorsque l'exercice Python à la fin du livre a été effectué lors de la vérification des données
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Mémo d'étude Python & Machine Learning: Préparation de l'environnement
Notes d'apprentissage depuis le début de Python 1
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Cours de base Python (à la fin de 15)
Mémo d'étude Python & Machine Learning ③: Réseau neuronal
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Notes d'apprentissage depuis le début de Python 2
Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
Présentation du livre "Créer une IA rentable avec Python" qui vous permet d'apprendre l'apprentissage automatique dans le cours le plus court
[Python] Lire le code source de Bottle Part 2
Classification des images de guitare par apprentissage automatique Partie 1
Apprentissage automatique à partir de Python Personal Memorandum Part2
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Mathématiques Todai 2016 résolues avec Python
Apprentissage automatique à partir de Python Personal Memorandum Part1
EV3 x Python Machine Learning Partie 2 Régression linéaire
[Python] Lire le code source de Bottle Part 1
À propos du contenu de développement de l'apprentissage automatique (exemple)
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Classification des images de guitare par apprentissage automatique, partie 2
Touchons une partie de l'apprentissage automatique avec Python
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Prédire le temps objectif d'un marathon complet avec l'apprentissage automatique-③: j'ai essayé de visualiser les données avec Python-
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[CodeIQ] J'ai écrit la distribution de probabilité des dés (du cours de mathématiques CodeIQ pour l'apprentissage automatique [Distribution de probabilités])
[Apprentissage automatique] "Détection d'anomalies et détection de changement" Dessinons la figure du chapitre 1 en Python.