[PYTHON] Analyse inverse du modèle d'apprentissage automatique

Qu'est-ce que l'analyse inverse?

En général, trouver les propriétés physiques d'une substance synthétisée à partir des conditions de la source de synthèse est appelé un ** problème direct **, et dans la direction opposée, il est parfois exprimé comme ** résolution d'un problème inverse **.

2020-05-17_21h41_33.png

Objectif de cet article

** Effectuer une analyse inverse du modèle d'apprentissage automatique. ** **

Si les propriétés physiques peuvent être prédites par l'apprentissage automatique, il devrait être possible de rechercher une valeur d'entrée qui rend la sortie du modèle une valeur prédéterminée.

Cependant, plus la dimension d'entrée (le nombre de variables explicatives) est grande, plus l'espace à rechercher est grand, et il devrait y avoir des cas où l'analyse inverse ne peut pas être effectuée en fonction du temps de recherche et des performances de l'ordinateur.

  1. Par conséquent, créez d'abord un modèle de prédiction pour des données simples et confirmez que l'analyse inverse est possible.
  2. Ensuite, tout en augmentant le nombre de variables explicatives, nous étudierons comment la précision de l'analyse inverse diminue. (Prévu pour être ajouté plus tard)

conception de base

2020-05-17_22h26_01.png

Sans rien faire de compliqué, j'essaierai de ** rechercher la valeur d'entrée qui minimise la sortie pour le modèle de régression **.

La forêt aléatoire est utilisée comme modèle de régression pour le moment.

SMBO (Sequential Model-based Global Optimization) est utilisé comme algorithme de recherche et hyperopt est utilisé comme bibliothèque. (Il existe d'autres diverses méthodes).

1. Analyse inverse du modèle de jouet

environnement

Réglage

En tant que modèle simple

y= x_1 {}^2 + x_2 {}^2, \qquad (x_1, x_2) \in \mathbb{R} ^2

Je pense à la correspondance. Évidemment, la valeur minimale est $ 0 $ et le point donnant cela est $ (x_1, x_2) = (0,0) $.

2020-05-17_22h37_02.png

Code de génération de graphe sur
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def true_function(x, y):
    """Vraie fonction"""
    return x ** 2 + y ** 2

X, Y = np.mgrid[-100:100, -100:100]
Z = true_function(X, Y)

plt.rcParams["font.size"] = 10  #Augmenter la taille de la police
fig = plt.figure(figsize = (12, 9))
ax = fig.add_subplot(111, projection="3d", facecolor="w")
ax.plot_surface(X, Y, Z, cmap="rainbow", rstride=3, cstride=3)
ax.set_xlabel('x1', fontsize=15)
ax.set_ylabel('x2', fontsize=15)  
ax.set_zlabel('y', fontsize=15) 
plt.show()

1.1 Génération de données de test d'entraînement

Sur la base de la correspondance ci-dessus, un groupe d'échantillons d'entrée / sortie est généré.

Dessinez les données d'entraînement générées.

2020-05-17_22h48_51.png

Code de génération de graphe sur
from sklearn.model_selection import train_test_split

def true_model(X):
    return true_function(X[:,[0]], X[:,[1]])

X = np.random.uniform(low=-100,high=100,size=(3000,2))
Y = true_model(X)

test_size = 0.3  #Rapport de division

x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=0)
  
fig = plt.figure(figsize = (12, 9)) 
ax = plt.axes(projection ="3d")
sctt = ax.scatter3D(x_train[:,0], x_train[:,1], y_train[:,0], c=y_train[:,0], s=8, alpha = 0.6,
                    cmap = plt.get_cmap('rainbow'), marker ='^') 

plt.title("x_train, y_train") 
ax.set_xlabel('x1', fontsize=15)
ax.set_ylabel('x2', fontsize=15)  
ax.set_zlabel('y', fontsize=15) 
plt.show() 

1.2 Apprentissage / Raisonnement

La forêt aléatoire est entraînée avec les données d'apprentissage mentionnées précédemment et le résultat de l'inférence à partir des données de test est tiré.

2020-05-17_22h52_46.png

Il semble que la valeur correcte puisse être estimée.

1.3 Trouver la valeur minimale du modèle de régression

Essayez de trouver la valeur minimale par hyperopt.

Après avoir défini la fonction à minimiser, recherchez le point qui donne la valeur minimale et tracez le point obtenu au-dessus de la figure précédente.

2020-05-17_23h14_09.png

Code de génération de graphe sur
from hyperopt import hp
from hyperopt import fmin
from hyperopt import tpe

def objective_hyperopt_by_reg(args):
    """Fonction objective pour hyperopt"""
    global reg
    x, y = args
    return float(reg.predict([[x,y]]))

def hyperopt_exe():
    """Effectuer l'optimisation avec hyperopt"""
    #Paramètres de l'espace de recherche
    space = [
        hp.uniform('x', -100, 100),
        hp.uniform('y', -100, 100)
    ]

    #Commencer l'exploration
    best = fmin(objective_hyperopt_by_reg, space, algo=tpe.suggest, max_evals=500)
    return best

best = hyperopt_exe()
print(f"best: {best}")

fig = plt.figure(figsize = (12, 9)) 
ax = plt.axes(projection ="3d")
sctt = ax.scatter3D(x_test[:,0], x_test[:,1], y_test[:,0], c=y_test[:,0], s=6, alpha = 0.5,
                    cmap = plt.get_cmap('rainbow'), marker ='^')
ax.scatter3D([best["x"]], [best["y"]], [objective_hyperopt_by_reg((best["x"], best["y"]))], 
                    c="red", s=250, marker="*", label="minimum") 

plt.title("x_test, y_pred", fontsize=18) 
ax.set_xlabel('x1', fontsize=15)
ax.set_ylabel('x2', fontsize=15)  
ax.set_zlabel('y', fontsize=15) 
plt.legend(fontsize=15)
plt.show() 

output


100%|██████████████████████████████████████████████| 500/500 [00:09<00:00, 52.54trial/s, best loss: 27.169204190118908]
best: {'x': -0.6924078319870626, 'y': -1.1731945130395605}

Un point proche du point minimum a été obtenu.

Résumé et défis

Dans cet article, nous avons effectué la procédure d'apprentissage du modèle de régression ⇒ analyse inverse sur des données simples.

Comme la dimension d'entrée était petite cette fois, nous avons pu trouver la valeur minimale par hasard, mais on s'attend à ce que divers problèmes surviennent lors de son application à des données réelles.

En outre, ** problème inverse est une analyse extrêmement absurde si elle n'est pas gérée correctement. On s'attend à ce qu'il y ait un risque de faire **.

Je veux vraiment éviter de gaspiller des efforts car j'ai posé un problème inverse malgré un tel problème.

référence

Recommended Posts

Analyse inverse du modèle d'apprentissage automatique
Modèle d'apprentissage automatique prenant en compte la maintenabilité
Créer un environnement d'apprentissage automatique
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Apprentissage automatique
Créer un modèle d'apprentissage à l'aide de MNIST
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Analysons la machine de jeu rétro chinoise
Créer un environnement de développement pour l'apprentissage automatique
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]
Classer les informations liées à l'apprentissage automatique par modèle de sujet
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Touchons une partie de l'apprentissage automatique avec Python
Histoire de l'analyse de données par apprentissage automatique
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique
[Apprentissage automatique] Créez un modèle d'apprentissage automatique en effectuant un apprentissage par transfert avec votre propre ensemble de données
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique ⑤ Résumé AdaBoost
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Apprentissage automatique: supervisé - AdaBoost
Créer un environnement Python d'apprentissage automatique sur Mac OS
Machine de vecteur de support d'apprentissage automatique
Installation de TensorFlow, une bibliothèque d'apprentissage automatique de Google
Étudier l'apprentissage automatique ~ matplotlib ~
Sentons-nous comme un chercheur en matériaux avec l'apprentissage automatique
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
[Python] J'ai créé un classificateur pour les iris [Machine learning]
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Apprenez en quelque sorte le machine learning
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Mémo de construction d'environnement d'apprentissage automatique par Python
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Introduction à l'apprentissage automatique à partir de Simple Perceptron
Windows10 (x64) Créer nativement un environnement d'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches