Построение графика для сравнения Huber и Ridge

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49160{{"Построение графика для сравнения Huber и Ridge"}} sklearn/datasets -.-> lab-49160{{"Построение графика для сравнения Huber и Ridge"}} ml/sklearn -.-> lab-49160{{"Построение графика для сравнения Huber и Ridge"}} end

Импортируем необходимые библиотеки

Начнем с импорта необходимых библиотек, включая numpy и matplotlib для манипуляции данными и визуализации, а также HuberRegressor и Ridge из scikit - learn для построения регрессионных моделей.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import HuberRegressor, Ridge

Генерируем игрушечные данные

Теперь мы сгенерируем игрушечный набор данных с использованием функции make_regression из scikit - learn. Мы сгенерируем набор данных с 20 выборками, одним признаком и случайным种子ом 0. Также мы добавим некоторый шум к набору данных.

rng = np.random.RandomState(0)
X, y = make_regression(
    n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0
)

Добавляем сильные выбросы в набор данных

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

X_outliers = rng.normal(0, 0.5, size=(4, 1))
y_outliers = rng.normal(0, 2.0, size=4)
X_outliers[:2, :] += X.max() + X.mean() / 4.0
X_outliers[2:, :] += X.min() - X.mean() / 4.0
y_outliers[:2] += y.min() - y.mean() / 4.0
y_outliers[2:] += y.max() + y.mean() / 4.0
X = np.vstack((X, X_outliers))
y = np.concatenate((y, y_outliers))

Визуализируем набор данных

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

plt.plot(X, y, "b.")
plt.title("Dataset with Strong Outliers")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Обучаем HuberRegressor

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

## Define the range of values for epsilon
epsilon_values = [1, 1.5, 1.75, 1.9]

## Define the x values for plotting
x = np.linspace(X.min(), X.max(), 7)

## Define the colors for plotting
colors = ["r-", "b-", "y-", "m-"]

## Fit the huber regressor over a series of epsilon values.
for k, epsilon in enumerate(epsilon_values):
    huber = HuberRegressor(alpha=0.0, epsilon=epsilon)
    huber.fit(X, y)
    coef_ = huber.coef_ * x + huber.intercept_
    plt.plot(x, coef_, colors[k], label="huber loss, %s" % epsilon)

## Add a legend to the plot
plt.legend(loc=0)

## Show the plot
plt.title("HuberRegressor with Different Epsilon Values")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Обучаем Ridge-регрессор

Теперь мы обучим Ridge-регрессор на наборе данных и сравним его производительность с производительностью HuberRegressor.

## Fit a ridge regressor to compare it to huber regressor.
ridge = Ridge(alpha=0.0, random_state=0)
ridge.fit(X, y)
coef_ridge = ridge.coef_
coef_ = ridge.coef_ * x + ridge.intercept_
plt.plot(x, coef_, "g-", label="ridge regression")

## Add a legend to the plot
plt.legend(loc=0)

## Show the plot
plt.title("Comparison of HuberRegressor vs Ridge")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Резюме

В этом практическом занятии мы сравнили производительность двух регрессионных моделей, HuberRegressor и Ridge, на наборе данных с сильными выбросами. Мы сгенерировали искусственный набор данных, добавили в него сильные выбросы, а затем обучили обе модели на этом наборе данных. Мы визуализировали результаты и сравнили производительность моделей. Мы наблюдали, что HuberRegressor менее受 выбросов по сравнению с Ridge-регрессором, и что при увеличении значения эпсилон функция решения HuberRegressor приближается к функции решения Ridge-регрессора.