Модель регрессии Elastic-Net в Scikit-Learn

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

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

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

Введение

В этом лабораторном занятии мы будем использовать модель регрессии Elastic-Net из Scikit-learn, чтобы показать, как производительность оценщика на несмотренных данных (тестовые данные) отличается от производительности на тренировочных данных. Мы сгенерируем примерные данные, вычислим ошибки на тренировочных и тестовых данных и построим графики результатов функций.

Советы по работе с ВМ

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49320{{"Модель регрессии Elastic-Net в Scikit-Learn"}} sklearn/datasets -.-> lab-49320{{"Модель регрессии Elastic-Net в Scikit-Learn"}} ml/sklearn -.-> lab-49320{{"Модель регрессии Elastic-Net в Scikit-Learn"}} end

Генерация примерных данных

Мы сгенерируем примерные данные с использованием функции make_regression() из Scikit-learn. Мы установим количество тренировочных образцов в 75, количество тестовых образцов в 150 и количество признаков в 500. Мы также установим n_informative в 50 и shuffle в False.

import numpy as np
from sklearn import linear_model
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

n_samples_train, n_samples_test, n_features = 75, 150, 500
X, y, coef = make_regression(
    n_samples=n_samples_train + n_samples_test,
    n_features=n_features,
    n_informative=50,
    shuffle=False,
    noise=1.0,
    coef=True,
)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, train_size=n_samples_train, test_size=n_samples_test, shuffle=False
)

Вычисление ошибок на тренировочных и тестовых данных

Мы вычислим ошибки на тренировочных и тестовых данных с использованием модели регрессии Elastic-Net из Scikit-learn. Мы установим параметр регуляризации alpha в диапазон значений от 10^-5 до 10^1 с использованием np.logspace(). Мы также установим l1_ratio в 0,7 и max_iter в 10000.

alphas = np.logspace(-5, 1, 60)
enet = linear_model.ElasticNet(l1_ratio=0.7, max_iter=10000)
train_errors = list()
test_errors = list()
for alpha in alphas:
    enet.set_params(alpha=alpha)
    enet.fit(X_train, y_train)
    train_errors.append(enet.score(X_train, y_train))
    test_errors.append(enet.score(X_test, y_test))

i_alpha_optim = np.argmax(test_errors)
alpha_optim = alphas[i_alpha_optim]
print("Optimal regularization parameter : %s" % alpha_optim)

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

Мы построим графики результатов функций с использованием библиотеки matplotlib. Мы будем использовать функцию plt.subplot(), чтобы создать два подграфика. В первом подграфике мы построим ошибки на тренировочных и тестовых данных в зависимости от параметра регуляризации. Также построим вертикальную линию при оптимальном параметре регуляризации. Во втором подграфике мы построим истинные коэффициенты и оцененные коэффициенты.

import matplotlib.pyplot as plt

plt.subplot(2, 1, 1)
plt.semilogx(alphas, train_errors, label="Train")
plt.semilogx(alphas, test_errors, label="Test")
plt.vlines(
    alpha_optim,
    plt.ylim()[0],
    np.max(test_errors),
    color="k",
    linewidth=3,
    label="Optimum on test",
)
plt.legend(loc="lower right")
plt.ylim([0, 1.2])
plt.xlabel("Regularization parameter")
plt.ylabel("Performance")

## Show estimated coef_ vs true coef
plt.subplot(2, 1, 2)
plt.plot(coef, label="True coef")
plt.plot(coef_, label="Estimated coef")
plt.legend()
plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.26)
plt.show()

Резюме

В этом лабораторном занятии мы узнали, как использовать модель регрессии Elastic-Net из Scikit-learn для вычисления ошибок на тренировочных и тестовых данных и построения графиков результатов функций. Мы также узнали, как производительность оценщика на несмотренных данных (тестовые данные) отличается от производительности на тренировочных данных. Мы сгенерировали примерные данные, вычислили ошибки на тренировочных и тестовых данных и построили графики результатов функций с использованием функций make_regression(), linear_model.ElasticNet(), train_test_split(), np.logspace() и matplotlib.