[PYTHON] Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten

1. Zuallererst

Dieses Mal werde ich die Leistung des Regressionsmodells bewerten, das für maschinelles Lernen beim Schreiben des Codes verwendet wird.

2. Datensatz

Der verwendete Datensatz ist der Boston-Eigenheimpreis, der mit sklearn geliefert wird.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression,Ridge
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor
from sklearn.pipeline import Pipeline
from sklearn.metrics import r2_score
from sklearn.model_selection import cross_val_score
from sklearn.utils import shuffle

# --------Datensatz laden---------
dataset = load_boston()
X = pd.DataFrame(dataset.data, columns=dataset.feature_names)
y = pd.Series(dataset.target, name='y')
print('X.shape = ', X.shape)
print(X.join(y).head())

スクリーンショット 2019-11-29 10.00.34.png Die Daten sind insgesamt 506, die Merkmalsmenge beträgt 13 Artikel und y ist der Zielhauspreis.

3. Regressionsmodell

Diesmal werden fünf Regressionsmodelle verwendet. Später werden wir es zur Vereinfachung der Verwendung in Form einer Pipeline zusammenstellen. Hyperparameter sind die Standardeinstellung.

# ----------Pipeline-Einstellungen-----------
pipelines = {
  '1.Linear': Pipeline([('std',StandardScaler()),
                        ('est',LinearRegression())]),
     
  '2.Ridge' : Pipeline([('std',StandardScaler()),
                        ('est',Ridge(random_state=0))]),

  '3.Tree'  : Pipeline([('std',StandardScaler()),
                        ('est',DecisionTreeRegressor(random_state=0))]),

  '4.Random': Pipeline([('std',StandardScaler()),
                        ('est',RandomForestRegressor(random_state=0, n_estimators=100))]),  
     
  '5.GBoost': Pipeline([('std',StandardScaler()),
                        ('est',GradientBoostingRegressor(random_state=0))])
}

1.Linear ** Lineares Regressionsmodell (linear) ** unter Verwendung der Methode der kleinsten Quadrate.

2.Ridge Es handelt sich um ein ** Ridge-Regressionsmodell (Ridge) **, das das Übertraining unterdrückt, indem dem linearen Regressionsmodell L2-Regularisierungselemente hinzugefügt werden.

3.Tree Dies ist ein Regressionsmodell, das auf dem ** Entscheidungsbaum ** basiert.

4.Random Es ist ** Random Forest **, der aus zufällig ausgewählten Features mehrere Entscheidungsbäume erstellt und die Vorhersagen aller Entscheidungsbäume im Durchschnitt ausgibt.

5.GBoost ** Gradient Boosting **, das die Vorhersagegenauigkeit verbessert, indem nachfolgende Bäume Informationen (Residuen) erklären können, die von vorhandenen Baumgruppen nicht erklärt werden können.

4. Bewertungsindex

Verwenden Sie ** R2_score ** als Fehlerindex. Dies ist, um wie viel der vorhergesagte und gemessene quadratische Fehler Σ kleiner gemacht werden kann als der gemessene und gemessene durchschnittliche quadratische Fehler Σ.

Wenn die Vorhersage alle mit der tatsächlichen Messung übereinstimmt, kann der Index 1 sein, und wenn die Vorhersage zu schlecht ist, kann der Index negativ sein. スクリーンショット 2019-11-29 19.04.31.png

5. Holdout-Methode

Zunächst wird die Holdout-Methode durchgeführt, bei der es sich um eine allgemeine Methode zur Bewertung der Leistung eines Modells handelt. Die Generalisierungsleistung wird untersucht, indem die Daten in ** Trainingsdaten unterteilt werden: Testdaten = 8: 2 **, Training mit den Trainingsdaten und anschließende Auswertung mit unbekannten Testdaten.

# -----------Holdout-Methode-----------
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.20, random_state=1)  

scores = {}
for pipe_name, pipeline in pipelines.items():
    pipeline.fit(X_train, y_train)
    scores[(pipe_name,'train')] = r2_score(y_train, pipeline.predict(X_train))
    scores[(pipe_name,'test')] = r2_score(y_test, pipeline.predict(X_test))
print(pd.Series(scores).unstack())

スクリーンショット 2019-11-29 10.46.24.png Als Ergebnis der Auswertung mit unbekannten Testdaten war ** 5.GBoost ** am genauesten (0,924750).

In den Trainingsdaten wird der genaueste (1.0000) ** 3.Tree ** in den Testdaten deutlich auf (0.821282) zurückgesetzt, was darauf hinweist, dass er in Übertraining geraten ist.

** 2.Ridge ** sollte eine verbesserte Version von ** 1.Linear ** sein, aber die Testdaten zeigen eine leichte Umkehrung der Genauigkeit. Dies liegt daran, dass die Genauigkeitsmessung nach der Holdout-Methode etwas variiert und wir die Leistung später nach der strengeren k-Fold-Methode vergleichen werden.

6. Restgrundstück

Restdiagramme werden erstellt, um die Modellleistung zu visualisieren. Dies zeichnet Trainingsdaten und Testdaten mit ** vorhergesagtem Wert ** auf der horizontalen Achse und ** Differenz zwischen vorhergesagtem Wert und tatsächlichem Wert ** auf der vertikalen Achse auf.

# -------------Restgrundstück------------
for pipe_name, est in pipelines.items():
    y_train_pred = est.predict(X_train)
    y_test_pred = est.predict(X_test)
    plt.scatter(y_train_pred, y_train_pred - y_train, c = 'blue', alpha=0.5, marker = 'o', label = 'train')
    plt.scatter(y_test_pred, y_test_pred - y_test, c = 'red', marker ='x', label= 'test' )
    plt.hlines(y = 0, xmin = 0, xmax = 50, color = 'black')
    plt.ylim([-20, 20])
    plt.xlabel('Predicted values')
    plt.ylabel('Residuals')        
    plt.title(pipe_name)
    plt.legend()
    plt.show()

Als Ausgabe des Codes werden 5 Residuen von 1.Linear bis 5.GBoost dargestellt, aber hier werden nur 3 typische Residuen angehoben.

スクリーンショット 2019-11-29 11.07.29.png ** Lineares Regressionsmodell **. Sowohl die Trainingsdaten als auch die Testdaten weisen fast die gleiche Restvariation auf.

スクリーンショット 2019-11-29 11.07.54.png ** Entscheidungsbaum **. Während die Trainingsdaten einen vollständigen Rest von Null aufweisen (Genauigkeit 100%), weisen die Testdaten eine große Restschwankung auf. Dies ist ein typisches Überlernen.

スクリーンショット 2019-11-29 11.08.09.png ** Gradientenverstärkung **. Die Variation der Residuen wird sowohl in den Trainingsdaten als auch in den Testdaten unterdrückt.

7. k-hold-Methode

Die ** k-Hold-Methode ** (Überprüfung der k-Teilungskreuzung) ermöglicht eine strengere Modellbewertung als die Holdout-Methode.

Das spezifische Verfahren besteht darin, zuerst die Daten in k Teile zu teilen, sie einzeln auszuwählen, um Testdaten zu erstellen, und die verbleibenden k-1 Teile als Trainingsdaten zu verwenden.

Dann besteht die ** k-Hold-Methode ** darin, mit den Trainingsdaten zu trainieren, die Genauigkeitsmessung mit den Testdaten k-mal zu wiederholen und den Durchschnitt der erhaltenen Genauigkeit als Genauigkeit des Modells zu verwenden. Hier ist k = 5 (angegeben durch cv = 5)....

# -------------- k-Faltmethode--------------
X_shuffle, y_shuffle =shuffle(X, y, random_state= 1)  #Daten mischen

scores={}
for pipe_name, est in pipelines.items():  
    cv_results = cross_val_score(est, X_shuffle, y_shuffle, cv=5, scoring='r2')    
    scores[(pipe_name,'avg')] = cv_results.mean()
    scores[(pipe_name,'score')] = np.round(cv_results,5)  # np.rund ist die Zifferneinstellung
print(pd.Series(scores).unstack())

スクリーンショット 2019-11-29 11.21.38.png Die fünf Zahlen ** Punktzahl ** in [] neben ** Durchschnitt ** sind die jedes Mal berechnete Genauigkeit. Wenn Sie sich ** 1.Linear ** ansehen, können Sie sehen, dass es von ** Minimum 0,64681 bis Maximum 0,76342 ** variiert. Durch Mittelung dieser Zahlen wird eine strikte Modellbewertung durchgeführt.

Sie können sehen, dass ** 2.Ridge ** etwas genauer ist als ** 1.Linear **.

Letztendlich war das beste Modell für die Immobilienpreise in Boston ** 5.GBoost **.

Recommended Posts

Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Bewerten Sie die Leistung eines einfachen Regressionsmodells mithilfe der LeaveOneOut-Schnittstellenvalidierung
Ich habe versucht, die beim maschinellen Lernen verwendeten Bewertungsindizes zu organisieren (Regressionsmodell).
Anfänger des maschinellen Lernens versuchen eine lineare Regression
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
[Maschinelles Lernen] Überprüfen Sie die Leistung des Klassifikators anhand handgeschriebener Zeichendaten
Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Management von Modellen für maschinelles Lernen, um Streitigkeiten mit der Unternehmensseite zu vermeiden
Bewerten Sie die Genauigkeit des Lernmodells durch einen Kreuztest von scikit learn
Versuchen Sie, das Triplett des Bootsrennens vorherzusagen, indem Sie das Lernen bewerten
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
Algorithmus für maschinelles Lernen (Verallgemeinerung der linearen Regression)
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
<Kurs> Maschinelles Lernen Kapitel 2: Nichtlineares Regressionsmodell
Ich habe versucht, die Vorhersage-API des maschinellen Lernmodells von WordPress aus aufzurufen
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
Verbesserung der Leistungsmetrik durch 2-Stufen-Lernmodell
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Anordnung von selbst erwähnten Dingen im Zusammenhang mit maschinellem Lernen
Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen
Versuchen Sie, Code aus 1 mit dem Framework Chainer für maschinelles Lernen (Mnist Edition) zu schreiben.
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Logistische Regression beim maschinellen Lernen
Lineare Regression des maschinellen Lernens
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Einführung in das maschinelle Lernen
Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell
Versuchen Sie, die Probleme des "Matrix-Programmierers" zu lösen (Kapitel 1).
Eindrücke vom Udacity Machine Learning Engineer Nano-Abschluss
Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Über das Testen bei der Implementierung von Modellen für maschinelles Lernen
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Einführung in das maschinelle Lernen ~ Zeigen wir die Tabelle der K-Methode für den nächsten Nachbarn ~ (+ Fehlerbehandlung)
Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.1. Kreuzvalidierung: Bewerten Sie die Leistung des Schätzers
Eine Einführung in das maschinelle Lernen
Maschinelles Lernen: Überwacht - Lineare Regression
Grundlagen des maschinellen Lernens (Denkmal)
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 2)
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.