Построение графика для мульти-выходной регрессии с использованием случайного леса

Beginner

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

Введение

В этом практическом занятии демонстрируется использование мета-оценщика с несколькими выходами для выполнения регрессии с несколькими выходами. В качестве алгоритма используется регрессор случайного леса, который поддерживает регрессию с несколькими выходами "из коробки", поэтому результаты можно сравнить. Целью этого практического занятия является показать, как использовать MultiOutputRegressor в scikit-learn для выполнения регрессии с несколькими выходами и сравнить результаты с стандартным регрессором случайного леса.

Советы по использованию ВМ

После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

Сначала нам нужно импортировать необходимые библиотеки. Будем использовать numpy, matplotlib и RandomForestRegressor, train_test_split и MultiOutputRegressor из scikit-learn.

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

Создание случайного набора данных

Далее мы создадим случайный набор данных для нашей регрессии. Мы будем использовать numpy для создания набора из 600 значений x в диапазоне от -100 до 100 и соответствующих значений y, вычисленных по синусу и косинусу значений x плюс некоторый случайный шум.

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)

Разделение данных на обучающий и тестовый наборы

Мы разделим наши данные на обучающий набор из 400 элементов и тестовый набор из 200 элементов с использованием функции train_test_split из scikit-learn.

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

Создание регрессора случайного леса

Мы создадим регрессора случайного леса с максимальной глубиной 30 и 100 оценщиками с использованием RandomForestRegressor из scikit-learn.

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

Создание MultiOutputRegressor

Мы создадим MultiOutputRegressor, используя регрессора случайного леса в качестве основного оценивающего инструмента. Мы будем использовать те же параметры, что и в шаге 4.

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

Предсказания на новых данных

Мы будем использовать как регрессора случайного леса, так и мульти-выходной регрессор для получения предсказаний на наших тестовых данных.

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

Построение графиков результатов

Мы построим графики результатов, чтобы сравнить производительность двух регрессоров. Мы будем использовать matplotlib для создания точечного графика с фактическими тестовыми данными, предсказаниями, сделанными регрессором случайного леса и предсказаниями, сделанными мульти-выходным регрессором.

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()

Резюме

В этом практическом занятии показано, как использовать MultiOutputRegressor из scikit-learn для выполнения мульти-выходной регрессии. Мы сравнили производительность мульти-выходного регрессора с стандартным регрессором случайного леса на случайном наборе данных. Результаты показали, что мульти-выходной регрессор продемонстрировал несколько лучшие результаты, чем регрессор случайного леса.