Введение
В этом практическом занятии мы научимся использовать кросс-валидацию для визуализации предсказаний модели и ошибок с использованием функций cross_val_predict и PredictionErrorDisplay из библиотеки scikit-learn. Мы загрузим датасет по диабету, создадим экземпляр модели линейной регрессии и используем кросс-валидацию для получения массива предсказаний. Затем мы используем PredictionErrorDisplay для построения графика фактических значений против предсказанных, а также остатков против предсказанных значений.
Советы по работе с ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.
Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Загрузка и подготовка данных
Сначала мы загрузим датасет по диабету и подготовим его для моделирования. Мы будем использовать функцию load_diabetes из библиотеки scikit-learn для загрузки датасета в два массива: X и y.
from sklearn.datasets import load_diabetes
X, y = load_diabetes(return_X_y=True)
Создание модели линейной регрессии
Далее мы создадим экземпляр модели линейной регрессии с использованием класса LinearRegression из библиотеки scikit-learn.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
Генерация кросс-валидированных предсказаний
Мы будем использовать функцию cross_val_predict из библиотеки scikit-learn для генерации кросс-валидированных предсказаний.
from sklearn.model_selection import cross_val_predict
y_pred = cross_val_predict(lr, X, y, cv=10)
Визуализация ошибок предсказания
Мы будем использовать PredictionErrorDisplay из библиотеки scikit-learn для визуализации ошибок предсказания. Построим график фактических значений против предсказанных, а также остатков против предсказанных значений.
import matplotlib.pyplot as plt
from sklearn.metrics import PredictionErrorDisplay
fig, axs = plt.subplots(ncols=2, figsize=(8, 4))
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="actual_vs_predicted",
subsample=100,
ax=axs[0],
random_state=0,
)
axs[0].set_title("Actual vs. Predicted values")
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="residual_vs_predicted",
subsample=100,
ax=axs[1],
random_state=0,
)
axs[1].set_title("Residuals vs. Predicted Values")
fig.suptitle("Plotting cross-validated predictions")
plt.tight_layout()
plt.show()
Интерпретация результатов
Из визуализаций мы можем увидеть, что график фактических значений против предсказанных показывает относительно линейную зависимость с некоторой вариацией. График остатков против предсказанных значений демонстрирует относительно случайный паттерн без четкого тренда, что указывает на то, что модель линейной регрессии может быть хорошим подходом для данных. Однако важно отметить, что мы использовали cross_val_predict только для целей визуализации. Будет проблематично количественно оценить производительность модели, вычислив одну метрику производительности из конкатенированных предсказаний, возвращаемых cross_val_predict, когда различные CV-склады различаются по размеру и распределениям. Рекомендуется вычислять метрики производительности для каждой фолда с использованием cross_val_score или cross_validate вместо этого.
Резюме
В этом практическом занятии мы узнали, как использовать кросс-валидацию для визуализации предсказаний модели и ошибок с использованием функций cross_val_predict и PredictionErrorDisplay из библиотеки scikit-learn. Мы загрузили датасет по диабету, создали экземпляр модели линейной регрессии и использовали кросс-валидацию для получения массива предсказаний. Затем мы использовали PredictionErrorDisplay для построения графика фактических значений против предсказанных, а также остатков против предсказанных значений. Наконец, мы проинтерпретировали результаты и обсудили важность использования метрик производительности для каждой фолда при оценке модели.