[PYTHON] Multiple Regressionsanalyse mit Keras

Multiple Regressionsanalyse mit Keras

Ich habe eine einfache multiple Regressionsanalyse mit Deep Learning (oder Keras) versucht. Deep Learning hat das Bild von Klassifizierungsproblemen und Bestärkungslernen, bedeutet jedoch nicht, dass eine Regressionsanalyse nicht möglich ist. Neuronale Netze werden auch für die Regressionsanalyse verwendet, daher ist dies ein Versuch, eine Regressionsanalyse auch beim Deep Learning durchzuführen.

Der Code, den ich gemacht habe, ist hier. https://github.com/shibuiwilliam/keras_regression_sample

Was ist diesmal zu tun?

Die multiple Regressionsanalyse wird mithilfe der Keras-Regressor-API von Keras durchgeführt. Die Daten sind Beispieldaten von Diabetikern, die von scikit-learn bereitgestellt werden. Es wird häufig in der Regressionsanalyse verwendet und enthält kleine und bequeme Daten.

Der Zweck dieser Zeit ist es, ein Verfahren zu schreiben, um eine Regressionsanalyse in Deep Learning oder einem neuronalen Netzwerk durchzuführen. Das Erstellen eines Regressionsanalysemodells mit Deep Learning verbessert jedoch nicht die Genauigkeit.

Bitte beachten Sie auch, dass die Regressionsanalyse diesmal keine numerische Zeitreihen-Datenvorhersage durch RNN oder LSTM ist.

Ergänzung: Über maschinelles Lernen

Wenn Sie das Modell des maschinellen Lernens und des tiefen Lernens ** sehr grob ** positionieren, sieht es so aus.

1.png

Ich denke nicht, dass dies alles ist, da täglich neue Papiere und Modelle vorgeschlagen werden, aber es ist ein grobes Bild. Dieses Mal werden wir DNN tun.

Vorbereitungen

Laden Sie die Daten als vorläufige Vorbereitung.

# import libraries
import numpy as np
import pandas as pds
from keras.models import Sequential
from keras.layers import Input, Dense, Dropout, BatchNormalization
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_diabetes

# use diabetes sample data from sklearn
diabetes = load_diabetes()

# load them to X and Y
X = diabetes.data
Y = diabetes.target

Daten wie diese werden geladen.

2.JPG

Es scheint, dass es bereits normalisiert wurde. Es handelt sich um kleine Beispieldaten mit 442 Zeilen und 10 Eingangsvariablen.

8.JPG

Siehe hier für Details zu den Daten. http://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf

KerasRegressor Keras bietet eine API für die Regressionsanalyse namens Keras Regressor. https://keras.io/ja/scikit-learn-api/

Keras selbst gibt nicht viele Details an, aber der Punkt ist, dass es ein Wrapper für das Regressionsmodell von Scicit-Learn zu sein scheint. Möglicherweise wurde Keras Regressor erstellt, um mit einer praktischen Metrik-API für die Scikit-Learn-Regressionsanalyse (z. B. cross_val_score oder mean_squared_error) zu arbeiten.

Der Weg, ein neuronales Netzwerkmodell zu schreiben, ist Keras selbst. Lassen Sie uns zunächst ein einfaches Modell erstellen (eine Eingabeebene, eine Zwischenebene und eine Ausgabeebene).

# create regression model
def reg_model():
    model = Sequential()
    model.add(Dense(10, input_dim=10, activation='relu'))
    model.add(Dense(16, activation='relu'))
    model.add(Dense(1))

    # compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model

Wenn man eine Zusammenfassung macht, sieht es so aus.

3.JPG

Bis zu diesem Punkt bleibt der herkömmliche Keras derselbe. Der Unterschied zur Vergangenheit besteht darin, wie man beim Lernen fit schreibt.

Es gibt ungefähr zwei Möglichkeiten zu lernen.

  1. Lernen Sie, indem Sie Trainingsdaten und Testdaten trennen
  2. Lernen durch Gegenüberstellung

Es scheint, dass eine allgemeine Methode für die Regressionsanalyse verwendet werden kann.

Beispiel 1 Lernen durch Trennen von Trainingsdaten und Testdaten

Lassen Sie uns das obige einfache Modell getrennt von Trainingsdaten und Testdaten lernen.

# use data split and fit to run the model
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1, random_state=0)
estimator = KerasRegressor(build_fn=reg_model, epochs=100, batch_size=10, verbose=0)
estimator.fit(x_train, y_train)
y_pred = estimator.predict(x_test)

# show its root mean square error
mse = mean_squared_error(y_test, y_pred)
print("KERAS REG RMSE : %.2f" % (mse ** 0.5))

Schließlich gibt die Standardausgabe den quadratischen Mittelwert des Erro an. Der Schreibstil ist Scikit-Lern-ähnlich (aber Keras ist in erster Linie Scikit-Lern-ähnlich).

Beispiel 2 Lernen durch Gegenüberstellung

Lassen Sie uns mit der gegenseitigen Überprüfung weiter lernen.

# use Kfold and cross validation to run the model
seed = 7
np.random.seed(seed)
estimator = KerasRegressor(build_fn=reg_model, epochs=100, batch_size=10, verbose=0)
kfold = KFold(n_splits=10, random_state=seed)

# show its root mean square error
results = cross_val_score(estimator, X, Y, scoring='neg_mean_squared_error', cv=kfold)
mse = -results.mean()
print("KERAS REG RMSE : %.2f" % (mse ** 0.5))

Auch hier wird am Ende die Quadratwurzel des durchschnittlichen Quadratfehlers berechnet. Lassen Sie uns jedes Ergebnis arrangieren.

9.JPG

Nun, es macht keinen großen Unterschied.

Versuchen wir, die Netzwerkschicht zu vertiefen

Ich habe bisher mehrere Regressionsanalysen mit einem einfachen neuronalen Netzwerk durchgeführt. Versuchen wir nun, die Netzwerkschicht zu vertiefen.

# create deep learning like regression model
def deep_reg_model():
    model = Sequential()
    model.add(Dense(10, input_dim=10, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.2))
    model.add(Dense(256, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.2))
    model.add(Dense(128, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.2))
    model.add(Dense(64, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.2))
    model.add(Dense(1))

    # compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model

Da es eine große Sache ist, habe ich Batch-Normalisierung und Dropout hinzugefügt.

6.JPG

Lass uns lernen.

# use data split and fit to run the model
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1, random_state=0)
estimator = KerasRegressor(build_fn=deep_reg_model, epochs=100, batch_size=10, verbose=0)
estimator.fit(x_train, y_train)
y_pred = estimator.predict(x_test)

# show its root mean square error
mse = mean_squared_error(y_test, y_pred)
print("KERAS REG RMSE : %.2f" % (mse ** 0.5))


# use Kfold and cross validation to run the model
seed = 7
np.random.seed(seed)
estimator = KerasRegressor(build_fn=deep_reg_model, epochs=100, batch_size=10, verbose=0)
kfold = KFold(n_splits=10, random_state=seed)

# show its root mean square error
results = cross_val_score(estimator, X, Y, scoring='neg_mean_squared_error', cv=kfold)
mse = -results.mean()
print("KERAS REG RMSE : %.2f" % (mse ** 0.5))


10.JPG

Es unterscheidet sich nicht wesentlich von einem einfachen Netzwerk. In Anbetracht der Berechnungszeit macht es keinen Sinn, sie zu vertiefen.

Schließlich

Ich habe mit Keras Regressor eine multiple Regressionsanalyse versucht. Vielleicht gibt es viele Leute, die das Gleiche versucht haben, aber der Grund, warum es nicht viele Beispiele für Google gibt, ist wahrscheinlich, dass die Genauigkeit nicht dramatisch verbessert wurde (Nageyari). Wenn Sie es mit größeren und komplexeren Daten versuchen, können Sie möglicherweise etwas anderes sagen. Wenn Sie also Daten finden, die gut aussehen, versuchen Sie es erneut.

Referenz

https://keras.io/ja/scikit-learn-api/ http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/ http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html http://qiita.com/TomokIshii/items/f355d8e87d23ee8e0c7a http://s0sem0y.hatenablog.com/entry/2016/05/22/215529

Recommended Posts

Multiple Regressionsanalyse mit Keras
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Führen Sie eine Regressionsanalyse mit NumPy durch
Algorithmus für maschinelles Lernen (multiple Regressionsanalyse)
Einfache Implementierung einer Regressionsanalyse mit Keras
Logistische Regressionsanalyse Selbst erstellt mit Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Poisson-Regressionsanalyse
Methode der Regressionsanalyse
[scikit-learn, matplotlib] Multiple Regressionsanalyse und 3D-Zeichnung
Erstellen Sie ein Multi-Output-Modell für die Regressionsanalyse [Anfänger]
Einfache LASSO-Regressionsanalyse mit Python (keine Theorie)
Datenanalyse mit Python 2
Mehrfachauswahl mit Jupyter
Lineare Regression mit Statistikmodellen
Bilderkennung mit Keras
Fügen Sie einen konstanten Term (y-Abschnitt) hinzu, wenn Sie mit Pythons Statsmodels mehrere Regressionsanalysen durchführen
Abhängigkeitsanalyse mit CaboCha
Sprachanalyse mit Python
CIFAR-10-Tutorial mit Keras
Regression mit einem linearen Modell
Multivariates LSTM mit Keras
Grundlagen der Regressionsanalyse
Sprachanalyse mit Python
Dynamische Analyse von Valgrind
Versuchen Sie eine Regression mit TensorFlow
Datenanalyse mit Python
Regressionsanalyse mit Python
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
2. Multivariate Analyse in Python 2-1. Multiple Regressionsanalyse (Scikit-Learn)
Kernel-Regression nur mit Numpy
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Keras-Installation (von Anaconda verwendet)
Was ist eine logistische Regressionsanalyse?
Ridge kehrt mit Mllib im Pyspark zurück
AutoEncodder-Notizen mit Keras
Word2vec mit Theano + Keras implementiert
Emotionsanalyse von Python (word2vec)
Satzerzeugung mit GRU (Keras)
Optimieren von Keras-Parametern mit Keras Tuner
Mit Pyradiomics erlernte Texturanalyse
Planare Skelettanalyse mit Python
Japanische morphologische Analyse mit Python
Erstellen Sie einfach CNNs mit Keras
Einfache Regressionsanalyse mit Python
[Python] Lineare Regression mit Scicit-Learn
Effizientes GAN mit Keras implementiert
Animieren Sie mehrere Diagramme mit matplotlib
Steuern Sie mehrere Roboter mit jupyter-lab
Muskel-Ruck-Analyse mit Python
[PowerShell] Morphologische Analyse mit SudachiPy
Text Emotionsanalyse mit ML-Ask
Bilderkennung mit Keras + OpenCV
Implementierung der logistischen Regression mit NumPy
Robuste lineare Regression mit Scikit-Learn
2. Multivariate Analyse in Python 2-3. Multiple Regressionsanalyse [COVID-19-Infektionsrate]
MNIST (DCNN) mit Keras (TensorFlow-Backend)
Erste einfache Regressionsanalyse in Python
Mehrere Seiten mit Beautiful Soup verschrotten