Введение
В этом лабораторном занятии мы будем использовать библиотеку Scikit-Learn на Python для выполнения регрессии с помощью бустингового дерева решений на одномерном синусоидальном наборе данных. Мы сравним производительность одного Регурессора дерева решений с производительностью Регурессора AdaBoost с 300 Регурессорами деревьев решений в качестве базовых обучателей.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук, чтобы получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь задавать вопросы Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Подготовка данных
Начнем с подготовки виртуальных данных с синусоидальной зависимостью и некоторым гауссовым шумом. Мы используем функцию linspace() из библиотеки Numpy для создания одномерного массива из 100 равномерно распределенных значений между 0 и 6. Затем мы используем атрибут np.newaxis, чтобы преобразовать одномерный массив в двумерный массив формы (100,1). Мы применяем функцию sin() к этому массиву и добавляем второй синусоидальный сигнал, полученный путем умножения массива на 6. Затем мы добавляем некоторый гауссовый шум с средним значением 0 и стандартным отклонением 0,1 с использованием функции normal() из библиотеки Numpy.
import numpy as np
rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis]
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0])
Обучение и предсказание с помощью Регурессоров дерева решений и AdaBoost
Теперь мы определяем классификаторы и настраиваем их на основе данных. Первый регрессор определяется как DecisionTreeRegressor с max_depth=4. Второй регрессор определяется как AdaBoostRegressor с DecisionTreeRegressor с max_depth=4 в качестве базового обучателя. Мы создаем AdaBoost Regressor с n_estimators=300 таких базовых обучателей. Затем мы настраиваем оба регрессора на основе данных и делаем предсказания на тех же данных, чтобы увидеть, насколько хорошо они подходят к ним.
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
regr_1 = DecisionTreeRegressor(max_depth=4)
regr_2 = AdaBoostRegressor(
DecisionTreeRegressor(max_depth=4), n_estimators=300, random_state=rng
)
regr_1.fit(X, y)
regr_2.fit(X, y)
y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)
Построение графиков результатов
Наконец, мы построим графики, показывающие, насколько хорошо наша модель работает с нашими двумя регрессорами: одним деревом решений и AdaBoost. Мы используем функцию scatter() библиотеки Matplotlib для построения точек обучающей выборки и предсказанных значений обоих регрессоров. Мы используем функцию plot() библиотеки Matplotlib для построения графиков предсказанных значений в зависимости от исходных данных для обоих регрессоров. Добавляем легенду на график, чтобы отличить между двумя регрессорами.
import matplotlib.pyplot as plt
import seaborn as sns
colors = sns.color_palette("colorblind")
plt.figure()
plt.scatter(X, y, color=colors[0], label="training samples")
plt.plot(X, y_1, color=colors[1], label="n_estimators=1", linewidth=2)
plt.plot(X, y_2, color=colors[2], label="n_estimators=300", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Boosted Decision Tree Regression")
plt.legend()
plt.show()
Резюме
В этом лабораторном занятии мы научились выполнять регрессию с помощью бустингового дерева решений на одномерном синусоидальном наборе данных с использованием библиотеки Scikit-Learn для Python. Мы сравнили производительность одного Регурессора дерева решений с производительностью Регурессора AdaBoost с 300 Регурессорами деревьев решений в качестве базовых обучателей. Мы визуализировали производительность обоих регрессоров с использованием Matplotlib.