Линейная регрессия
Линейная регрессия — это мощный статистический инструмент, широко используемый в машинном обучении и прогнозировании. Она находит линию наилучшего соответствия между зависимой переменной и одной или несколькими независимыми переменными, минимизируя сумму квадратов ошибок между предсказанными и фактическими значениями.
В этом руководстве мы покажем, как реализовать линейную регрессию в Python с помощью библиотеки scikit-learn. Мы начнем с краткого введения в метод и его применения, а затем подробно разберем полную реализацию.
Введение в линейную регрессию
Линейная регрессия моделирует взаимосвязь между зависимой переменной и одной или несколькими независимыми переменными. Она предполагает линейную зависимость, то есть изменения зависимой переменной пропорциональны изменениям независимых переменных. Метод широко применяется в финансах, экономике, маркетинге и инженерии для прогнозирования тенденций и поддержки принятия решений.
Существует два основных типа: простая линейная регрессия (одна независимая переменная) и множественная линейная регрессия (две или более независимых переменных). В этом руководстве основное внимание уделяется множественной линейной регрессии.
Реализация линейной регрессии с помощью Scikit-learn
Scikit-learn — это популярная библиотека машинного обучения для Python, предоставляющая мощные инструменты для анализа данных и построения моделей. Она включает выделенный модуль для линейной регрессии, что упрощает реализацию модели.
Шаг 1: Импорт необходимых библиотек
Прежде чем реализовать линейную регрессию с помощью scikit-learn, нам нужно импортировать необходимые библиотеки. Мы будем использовать следующие библиотеки:
Импорт необходимых библиотек для реализации линейной регрессии с помощью scikit-learn в Python:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_scoreШаг 2: Загрузка набора данных
Следующий шаг — загрузить набор данных, который мы будем использовать для обучения нашей модели линейной регрессии. Мы будем использовать набор данных California Housing, который является современным стандартом для задач регрессии.
Примечание: Набор данных Boston Housing был удален из scikit-learn версии 1.4 из-за этических соображений. Вместо него мы используем набор данных California Housing.
Загрузка набора данных для обучения модели линейной регрессии с помощью функции fetch_california_housing в Python:
from sklearn.datasets import fetch_california_housing
california = fetch_california_housing()
california_df = pd.DataFrame(california.data, columns=california.feature_names)
california_df['MedHouseVal'] = california.targetШаг 3: Исследование набора данных
Прежде чем обучать модель линейной регрессии, нам нужно изучить набор данных, чтобы понять его структуру и особенности. Мы можем сделать это, преобразовав набор данных в DataFrame pandas и используя функцию head() для отображения первых нескольких строк данных.
Преобразование набора данных в DataFrame pandas в Python:
california_df.head()Шаг 4: Подготовка данных для обучения
Следующий шаг — подготовить данные для обучения модели линейной регрессии. В качестве независимых переменных мы будем использовать признаки AveRooms и AveBedrms, а в качестве зависимой переменной — признак MedHouseVal.
Подготовка данных для обучения модели множественной линейной регрессии в Python:
X = california_df[['AveRooms', 'AveBedrms']]
y = california_df['MedHouseVal']Шаг 5: Разделение данных на обучающую и тестовую выборки
Чтобы оценить производительность нашей модели линейной регрессии, нам нужно разделить данные на обучающую и тестовую выборки. Для разделения данных мы будем использовать функцию train_test_split() из scikit-learn.
Разделение данных на обучающую и тестовую выборки в Python:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)Шаг 6: Обучение модели линейной регрессии
Следующий шаг — обучить модель линейной регрессии с использованием обучающей выборки. Для обучения модели мы будем использовать метод fit() класса LinearRegression.
Обучение модели линейной регрессии на обучающей выборке в Python:
regressor = LinearRegression()
regressor.fit(X_train, y_train)Шаг 7: Прогнозирование на тестовых данных
После обучения модели мы можем использовать ее для прогнозирования на тестовых данных. Для прогнозов мы будем использовать метод predict() класса LinearRegression.
После обучения модели мы можем использовать ее для прогнозирования на тестовых данных в Python:
y_pred = regressor.predict(X_test)Шаг 8: Оценка производительности модели
Для оценки производительности нашей модели линейной регрессии мы будем использовать две метрики: среднеквадратичная ошибка (MSE) и коэффициент детерминации (R²). Мы можем вычислить эти метрики с помощью функций mean_squared_error() и r2_score() из scikit-learn.
Вычисление MSE и R^2 в Python:
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print('Mean Squared Error:', mse)
print('Coefficient of Determination:', r2)Шаг 9: Визуализация результатов
Наконец, мы можем визуализировать результаты нашей модели линейной регрессии, построив график линии регрессии и фактических точек данных. Для создания графика мы будем использовать библиотеку matplotlib.
Визуализация результатов модели линейной регрессии путем построения линии регрессии и фактических точек данных в Python:
import matplotlib.pyplot as plt
plt.scatter(X_test['AveRooms'], y_test, color='black')
plt.plot(X_test['AveRooms'], y_pred, color='blue', linewidth=3)
plt.title('Linear Regression')
plt.xlabel('Average Rooms per Dwelling')
plt.ylabel('Median House Value (in $100,000s)')
plt.show()Заключение
В этом руководстве мы продемонстрировали, как реализовать линейную регрессию в Python с помощью scikit-learn. Мы рассмотрели импорт библиотек, загрузку и исследование набора данных, подготовку признаков, разделение данных, обучение модели, прогнозирование, оценку производительности и визуализацию результатов. Этот конвейер предоставляет прочную основу для создания и развертывания моделей регрессии в ваших собственных проектах машинного обучения.