Plot Random Forest Regression Multioutput

Beginner

This tutorial is from open-source community. Access the source code

Einführung

In diesem Lab wird die Verwendung des Multi-Output-Meta-Schätzers zur Durchführung von Multi-Output-Regression demonstriert. Es wird ein Random Forest Regressor verwendet, der Multi-Output-Regression nativ unterstützt, sodass die Ergebnisse verglichen werden können. Ziel dieses Labs ist es, zu zeigen, wie man die MultiOutputRegressor in scikit-learn verwendet, um Multi-Output-Regression durchzuführen und die Ergebnisse mit einem standardmäßigen Random Forest Regressor zu vergleichen.

VM-Tipps

Nachdem die VM gestartet ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

Zunächst müssen wir die erforderlichen Bibliotheken importieren. Wir werden numpy, matplotlib und die RandomForestRegressor, train_test_split und MultiOutputRegressor von scikit-learn verwenden.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor

Erstellen eines zufälligen Datensatzes

Als nächstes werden wir einen zufälligen Datensatz erstellen, den wir für unsere Regression verwenden. Wir werden numpy verwenden, um einen Satz von 600 x-Werten zwischen -100 und 100 zu erstellen und die entsprechenden y-Werte, die aus der Sinus- und Kosinusfunktion der x-Werte plus etwas zufälligem Rauschen berechnet werden.

rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(600, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y += 0.5 - rng.rand(*y.shape)

Teilen der Daten in Trainings- und Testsets

Wir werden unsere Daten mit der train_test_split-Funktion von scikit-learn in einen Trainingssatz von 400 und einen Testsatz von 200 teilen.

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=400, test_size=200, random_state=4)

Erstellen eines Random Forest Regressors

Wir werden einen Random Forest Regressor mit einer maximalen Tiefe von 30 und 100 Schätzern mit der RandomForestRegressor von scikit-learn erstellen.

max_depth = 30
regr_rf = RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=2)
regr_rf.fit(X_train, y_train)

Erstellen eines MultiOutputRegressors

Wir werden einen MultiOutputRegressor erstellen, der einen Random Forest Regressor als zugrunde liegenden Schätzer verwendet. Wir werden die gleichen Parameter wie in Schritt 4 verwenden.

regr_multirf = MultiOutputRegressor(RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=0))
regr_multirf.fit(X_train, y_train)

Vorhersagen für neue Daten

Wir werden sowohl den Random Forest Regressor als auch den Multi-Output Regressor verwenden, um Vorhersagen für unsere Testdaten zu machen.

y_rf = regr_rf.predict(X_test)
y_multirf = regr_multirf.predict(X_test)

Ergebnisse grafisch darstellen

Wir werden die Ergebnisse grafisch darstellen, um die Leistung der beiden Regressoren zu vergleichen. Wir werden matplotlib verwenden, um einen Streudiagramm der tatsächlichen Testdaten, der Vorhersagen des Random Forest Regressors und der Vorhersagen des Multi-Output Regressors zu erstellen.

plt.figure()
s = 50
a = 0.4
plt.scatter(y_test[:, 0], y_test[:, 1], edgecolor="k", c="navy", s=s, marker="s", alpha=a, label="Data")
plt.scatter(y_rf[:, 0], y_rf[:, 1], edgecolor="k", c="c", s=s, marker="^", alpha=a, label="RF score=%.2f" % regr_rf.score(X_test, y_test))
plt.scatter(y_multirf[:, 0], y_multirf[:, 1], edgecolor="k", c="cornflowerblue", s=s, alpha=a, label="Multi RF score=%.2f" % regr_multirf.score(X_test, y_test))
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Comparing Random Forests and the Multi-Output Meta Estimator")
plt.legend()
plt.show()

Zusammenfassung

In diesem Lab wurde gezeigt, wie man die MultiOutputRegressor von scikit-learn zum Durchführen von Mehrfachausgaberegression verwenden kann. Wir haben die Leistung des Mehrfachausgaberegressors mit einem Standard-Random-Forest-Regressor anhand eines zufälligen Datensatzes verglichen. Die Ergebnisse zeigten, dass der Mehrfachausgaberegressor leicht besser performte als der Random-Forest-Regressor.