[PYTHON] Inverse Analyse des maschinellen Lernmodells

Was ist inverse Analyse?

Im Allgemeinen wird das Finden der physikalischen Eigenschaften einer synthetisierten Substanz aus den Bedingungen der Synthesequelle als ** Vorwärtsproblem ** bezeichnet, und in der entgegengesetzten Richtung wird es manchmal als ** Lösen eines Rückwärtsproblems ** ausgedrückt.

2020-05-17_21h41_33.png

Zweck dieses Artikels

** Führen Sie eine inverse Analyse des maschinellen Lernmodells durch. ** **.

Wenn die physikalischen Eigenschaften durch maschinelles Lernen vorhergesagt werden können, sollte es möglich sein, nach einem Eingabewert zu suchen, der die Ausgabe des Modells zu einem vorbestimmten Wert macht.

Je größer jedoch die Eingabedimension (die Anzahl der erklärenden Variablen) ist, desto größer ist der zu durchsuchende Raum, und es sollte Fälle geben, in denen eine inverse Analyse abhängig von der Suchzeit und der Leistung des Computers nicht durchgeführt werden kann.

  1. Erstellen Sie daher zunächst ein Vorhersagemodell für einfache Daten und bestätigen Sie, dass eine inverse Analyse möglich ist.
  2. Danach werden wir, während wir die Anzahl der erklärenden Variablen erhöhen, untersuchen, wie die Genauigkeit der inversen Analyse abnimmt. (Geplant, um später hinzugefügt zu werden)

grundlegende Gestaltung

2020-05-17_22h26_01.png

Ohne etwas Kompliziertes zu tun, werde ich versuchen, ** nach dem Eingabewert zu suchen, der die Ausgabe für das Regressionsmodell minimiert **.

Zufälliger Wald wird vorerst als Regressionsmodell verwendet.

SMBO (Sequential Model-based Global Optimization) wird als Suchalgorithmus verwendet, und hyperopt wird als Bibliothek verwendet. (Es gibt andere verschiedene Methoden).

1. Inverse Analyse für Spielzeugmodell

Umgebung

Aufbau

Als einfaches Modell

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

Ich denke an die Korrespondenz. Offensichtlich ist der Mindestwert $ 0 $ und der Punkt, der dies angibt, ist $ (x_1, x_2) = (0,0) $.

2020-05-17_22h37_02.png

Code für die Diagrammgenerierung auf
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def true_function(x, y):
    """Wahre Funktion"""
    return x ** 2 + y ** 2

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

plt.rcParams["font.size"] = 10  #Erhöhen Sie die Schriftgröße
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 Generierung von Trainingstestdaten

Basierend auf der obigen Entsprechung wird eine Eingabe / Ausgabe-Stichprobengruppe erzeugt.

Zeichnen Sie die generierten Trainingsdaten.

2020-05-17_22h48_51.png

Code für die Diagrammgenerierung auf
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  #Teilungsverhältnis

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 Lernen / Denken

Der zufällige Wald wird mit den zuvor erwähnten Trainingsdaten trainiert, und das Ergebnis der Schlussfolgerung der Testdaten wird gezogen.

2020-05-17_22h52_46.png

Es scheint, dass der richtige Wert geschätzt werden kann.

1.3 Ermitteln des Mindestwerts für das Regressionsmodell

Versuchen Sie, den Mindestwert mit hyperopt zu ermitteln.

Suchen Sie nach dem Definieren der zu minimierenden Funktion nach dem Punkt, der den Mindestwert angibt, und zeichnen Sie den erhaltenen Punkt über die vorherige Abbildung.

2020-05-17_23h14_09.png

Code für die Diagrammgenerierung auf
from hyperopt import hp
from hyperopt import fmin
from hyperopt import tpe

def objective_hyperopt_by_reg(args):
    """Zielfunktion für Hyperopt"""
    global reg
    x, y = args
    return float(reg.predict([[x,y]]))

def hyperopt_exe():
    """Führen Sie die Optimierung mit Hyperopt durch"""
    #Suchraumeinstellungen
    space = [
        hp.uniform('x', -100, 100),
        hp.uniform('y', -100, 100)
    ]

    #Beginnen Sie mit der Erkundung
    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}

Ein Punkt nahe dem Minimalpunkt wurde erhalten.

Zusammenfassung und Herausforderungen

In diesem Artikel haben wir das Verfahren zum Lernen des Regressionsmodells ⇒ inverse Analyse einfacher Daten durchgeführt.

Da die Eingabedimension diesmal klein war, konnten wir den Mindestwert zufällig ermitteln. Es wird jedoch erwartet, dass beim Anwenden auf tatsächliche Daten verschiedene Probleme auftreten.

Außerdem ist ** umgekehrtes Problem eine äußerst unsinnige Analyse, wenn sie nicht richtig gehandhabt wird. Es wird erwartet, dass das Risiko besteht **.

Ich möchte definitiv vermeiden, Mühe zu verschwenden, weil ich trotz eines solchen Problems ein umgekehrtes Problem eingestellt habe.

Referenz

Recommended Posts

Inverse Analyse des maschinellen Lernmodells
Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Erstellen Sie eine maschinelle Lernumgebung
xgboost: Effektives Modell für maschinelles Lernen für Tabellendaten
Maschinelles Lernen
Erstellen eines Lernmodells mit MNIST
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
<Kurs> Maschinelles Lernen Kapitel 2: Nichtlineares Regressionsmodell
Lassen Sie uns die chinesische Retro-Spielmaschine analysieren
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Gaußscher EM-Algorithmus mit gemischtem Modell [statistisches maschinelles Lernen]
Klassifizieren Sie Informationen zum maschinellen Lernen nach Themenmodellen
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
Zusammenfassung des Lernprogramms für maschinelles Lernen
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Maschinelles Lernen: Betreut --AdaBoost
Erstellen Sie eine Python-Umgebung für maschinelles Lernen unter Mac OS
Maschinelles Lernen unterstützt Vektormaschine
Installation von TensorFlow, einer Bibliothek für maschinelles Lernen von Google
Maschinelles Lernen studieren ~ matplotlib ~
Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Lerne irgendwie maschinelles Lernen
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung
Einführung in das maschinelle Lernen
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Einführung in das maschinelle Lernen mit Simple Perceptron
Windows10 (x64) Erstellen Sie nativ eine maschinelle Lernumgebung
Maschinelles Lernen: k-Nächste Nachbarn