Введение
В этом практическом занятии демонстрируется использование мета-оценщика с несколькими выходами для выполнения регрессии с несколькими выходами. В качестве алгоритма используется регрессор случайного леса, который поддерживает регрессию с несколькими выходами "из коробки", поэтому результаты можно сравнить. Целью этого практического занятия является показать, как использовать 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 для выполнения мульти-выходной регрессии. Мы сравнили производительность мульти-выходного регрессора с стандартным регрессором случайного леса на случайном наборе данных. Результаты показали, что мульти-выходной регрессор продемонстрировал несколько лучшие результаты, чем регрессор случайного леса.