[PYTHON] Visualisez les effets de l'apprentissage profond / de la régularisation

1.Tout d'abord

J'ai commencé à étudier l'apprentissage profond. Cette fois, je résumerai brièvement la régularisation.

2. Création de données

Basé sur l'équation $ y = -x ^ 3 + x ^ 2 + x $, x est la valeur obtenue en divisant -10 à 10 par 50, et y est le résultat de la substitution de x dans l'équation et de l'ajout d'un nombre aléatoire de 0 à 0,05. Créez les données en tant que valeur.

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model
import numpy as np
import matplotlib.pyplot as plt

#Génération de données
np.random.seed(0)
X = np.linspace(-10, 10, 50)
Y_truth = 0.001 * (-X **3 + X**2 + X)
Y = Y_truth + np.random.normal(0, 0.05, len(X))

plt.figure(figsize=(5, 5))
plt.plot(X, Y_truth, color='gray')
plt.plot(X, Y, '.', color='k')
plt.show()

スクリーンショット 2019-12-26 15.31.05.png Ce sont les données créées. On suppose que le trait plein est la valeur vraie (valeur de l'équation) et le point est la valeur réellement observée (y plus le bruit).

3. Introduction de la régression polypoly

Le surapprentissage est plus susceptible de se produire lorsque le degré de liberté augmente, nous osons donc introduire une régression polynomiale à 30 dimensions.

#affichage graphique
def graph(Y_lr, name):
    plt.figure(figsize=(6, 6))
    plt.plot(X, Y_truth, color='gray', label='truth')
    plt.plot(xs, Y_lr, color='r', markersize=2, label=name)
    plt.plot(X, Y, '.', color='k')
    plt.legend()
    plt.ylim(-1, 1)
    plt.show()

#Paramètres d'affichage
xs = np.linspace(-10, 10, 200)  

#Introduction de la régression polypoly
poly = PolynomialFeatures(degree=30, include_bias=False)  
X_poly = poly.fit_transform(X[:, np.newaxis])   

Après avoir défini l'affichage et l'affichage du graphique, PolynomialFeatures est instancié et ajusté. La dimension est de 30 dimensions (degré = 30).

4. Aucune régularisation

Tout d'abord, effectuez une régression polymorphe sans régularisation.

#Pas de régularisation
lr0 = linear_model.LinearRegression(normalize=True)
lr0.fit(X_poly, Y)
Y_lr0 = lr0.predict(poly.fit_transform(xs[:, np.newaxis]))
graph(Y_lr0, 'No Regularization')

スクリーンショット 2019-12-26 15.32.47.png

En raison du degré élevé de liberté avec un polynôme à 30 dimensions, il est possible de passer de nombreux points de manière adroite, et cela tombe dans un surapprentissage typique. C'est loin d'être la vraie valeur, et les performances de généralisation ne peuvent pas être attendues avec cela.

5. Régularisation L2

La régularisation L2 est une technique connue pour la régression Ridge, qui limite le coefficient pour qu'il ne devienne pas trop grand, et ajoute la norme L2 du paramètre à la perte (C est une constante). L(W)+c|w|^2

#Régularisation L2
lr2 = linear_model.Ridge(normalize=True, alpha=0.5)
lr2.fit(X_poly, Y)
Y_lr2 = lr2.predict(poly.fit_transform(xs[:, np.newaxis]))
graph(Y_lr2, 'L2')

スクリーンショット 2019-12-26 15.33.51.png Eh bien, j'ai l'impression d'avoir pu bien rentrer.

6. Régularisation L1

La régularisation L1 est une technique connue pour la régression Lasso, qui limite également le coefficient pour qu'il ne devienne pas trop grand, en ajoutant la norme L1 du paramètre à la perte (C est une constante). L(W)+c|w|

#Régularisation L1
lr1 = linear_model.LassoLars(normalize=True, alpha=0.001)
lr1.fit(X_poly, Y)
Y_lr1 = lr1.predict(poly.fit_transform(xs[:, np.newaxis]))
graph(Y_lr1, 'L1')

スクリーンショット 2019-12-26 15.34.43.png La forme est très proche d'un ajustement parfait. Par rapport à la régularisation L1, la régularisation L2 semble pouvoir mieux revenir.

7. Comparaison des coefficients de dimension

Comparez 30 coefficients dimensionnels pour chacun sans régularisation, régularisation L2 et régularisation L1 (disposés à partir de la dimension la plus basse).

import pandas as pd
result = []
for i in range(len(lr0.coef_)):
      tmp = lr0.coef_[i], lr2.coef_[i], lr1.coef_[i]
      result.append(tmp)
df = pd.DataFrame(result)
df.columns = ['No Regularization', 'L2', 'L1']
print(df)

スクリーンショット 2019-12-26 15.43.05.png Vous pouvez voir que L2 a un coefficient plus petit que Pas de régularisation. L1 est également une expression (expression creuse) avec de nombreux points complètement 0.

Je suis heureux que la régularisation L1 puisse supprimer le surapprentissage et réduire les dimensions.

Recommended Posts

Visualisez les effets de l'apprentissage profond / de la régularisation
Othello-De la troisième ligne de "Implementation Deep Learning" (3)
Othello-De la troisième ligne de "Implementation Deep Learning" (2)
Deep learning 1 Pratique du deep learning
L'histoire de l'apprentissage profond avec TPU
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
Visualisez la trajectoire de Hayabusa 2
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Visualisez l'état de la réponse du recensement national 2020
L'apprentissage en profondeur
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
Notes d'apprentissage depuis le début de Python 1
Signification des modèles et paramètres d'apprentissage en profondeur
Analyse émotionnelle des tweets avec apprentissage en profondeur
Enregistrement d'apprentissage de la lecture "Deep Learning from scratch"
Visualisez les données d'exportation du journal Piyo
Notes d'apprentissage depuis le début de Python 2
Graphique de l'historique du nombre de couches de deep learning et du changement de précision
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Apprentissage profond / rétropropagation d'erreur de la fonction sigmoïde
Un mémorandum d'étude et de mise en œuvre du Deep Learning
[Mémo d'apprentissage] Apprentissage profond à partir de zéro ~ Mise en œuvre de l'abandon ~
Commencer l'apprentissage en profondeur
Compréhension de base de l'estimation de la profondeur stéréo (Deep Learning)
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Créez un environnement python pour apprendre la théorie et la mise en œuvre de l'apprentissage profond
Apprentissage en profondeur Python
Apprentissage parallèle du deep learning par Keras et Kubernetes
À propos du contenu de développement de l'apprentissage automatique (exemple)
Apprentissage profond × Python
Visualisez le comportement de l'algorithme de tri avec matplotlib
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Apprentissage profond appris par mise en œuvre (segmentation) ~ Mise en œuvre de SegNet ~
L'apprentissage en profondeur facilite considérablement la visualisation du laps de temps des changements physiques
Comment installer le framework d'apprentissage en profondeur Tensorflow 1.0 dans l'environnement Windows Anaconda
[Deep Learning from scratch] J'ai implémenté la couche Affine
J'ai installé et utilisé la bibliothèque Deep Learning Chainer
Visualisez la gamme d'insertions internes et externes avec python
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Application de Deep Learning 2 à partir de zéro Filtre anti-spam
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Apprendre en profondeur à partir des bases mathématiques Partie 2 (pendant la fréquentation)
J'ai essayé de visualiser les informations spacha de VTuber
Bibliothèque DNN (Deep Learning): Comparaison de chainer et TensorFlow (1)
Résumé du flux de base de l'apprentissage automatique avec Python
Bilan du premier défi du machine learning avec Keras
Visualisez le statut d'appréciation des œuvres d'art avec OpenCV
Les chats sont déjà fatigués de l'apprentissage profond et moelleux
J'ai étudié l'algorithme d'apprentissage de renforcement du trading d'algorithmes
Collecte et automatisation d'images érotiques à l'aide du deep learning
PROGRAMMATION PROFONDE PROBABILISTE --- Bibliothèque "Deep Learning + Bayes" --- Présentation d'Edward
Visualisez le nombre de plaintes des compagnies d'assurance-vie
La méthode de copie de pandas.DataFrame est une copie profonde par défaut