Узнайте, как создавать и оценивать производительность моделей линейной регрессии с использованием ключевых показателей.

Линейная регрессия — это мощный метод моделирования взаимосвязей между переменными. В Python линейную регрессию можно реализовать с помощью библиотеки scikit-learn, которая предоставляет удобный интерфейс для построения и оценки моделей линейной регрессии. В этой статье мы рассмотрим основы линейной регрессии и узнаем, как реализовать простую и множественную линейную регрессию с помощью кода Python.

Основы линейной регрессии

Определение

Линейная регрессия – это статистический метод моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными.

Цель линейной регрессии — найти линейную связь между переменными, которую можно использовать для прогнозирования зависимой переменной.

Типы линейной регрессии

Существует два типа линейной регрессии: простая линейная регрессия и множественная линейная регрессия. Простая линейная регрессия включает только одну независимую переменную, тогда как множественная линейная регрессия включает две или более независимых переменных.

Предположения линейной регрессии

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

  1. Линейность.Отношение между независимыми переменными и зависимой переменнойдолжно быть линейным. Другими словами, изменение зависимой переменной должно быть пропорционально изменению независимой переменной.
  2. Независимость: остатки (разница между прогнозируемыми значениями и фактическими значениями) не должны зависеть друг от друга. Это означает, что ошибка прогнозирования одной точки данных не должна влиять на ошибку прогнозирования другой точки данных.
  3. Гомоскедастичность. Дисперсия остатков должна быть постоянной на всех уровнях независимых переменных. Другими словами, разброс остатков должен быть одинаковым для всех прогнозируемых значений.
  4. Нормальность.Остатки должны подчиняться нормальному распределению. Это означает, что большинство невязок должно быть близко к нулю, а распределение невязок должно напоминать колоколообразную кривую.
  5. Отсутствие мультиколлинеарности. Независимые переменные не должны сильно коррелировать друг с другом. Мультиколлинеарность может привести к ненадежным и нестабильным оценкам коэффициентов.

Простая линейная регрессия

Объяснение

Простая линейная регрессия включает в себя нахождение линии наилучшего соответствия, описывающей взаимосвязь между зависимой переменной var. и независимый вар.

Уравнение для простой модели линейной регрессии: y = mx + b, где y — зависимая переменная, x > — независимая переменная, m — наклон линии, а b — точка пересечения с осью y.

Наклон:термин, также известный как угловой коэффициент или наклон, используется в линейной регрессии для описания наклона линии регрессии. Наклон – это значение, указывающее, насколько зависимая переменная (y) изменяется при каждом изменении независимой переменной (x).

Точка пересечения. Точка пересечения (B) – это точка, в которой линия регрессии пересекает ось Y. Это значение y, когда x равно нулю, и показывает ожидаемое значение зависимой переменной, когда все независимые переменные равны нулю. В уравнении линейной регрессии точкой пересечения является значение y, когда x равно нулю, плюс наклон, умноженный на x.

В целом: представьте, что вы пытаетесь нарисовать линию, которая наилучшим образом представляет набор точек на графике. Эта линия называется «линией регрессии» и помогает предсказать, куда могут попасть новые точки, исходя из их координат x и y.

Наклон линии регрессии подобен крутизне горки. Если наклон положительный, это означает, что для каждого шага вправо по оси x соответствующее значение y будет увеличиваться. Если наклон отрицательный, это означает, что для каждого шага вправо по оси x соответствующее значение y будет уменьшаться.

Точка пересечения линии регрессии подобна начальной точке слайда. Это точка, в которой линия касается оси Y, когда x равен нулю. Это помогает вам предсказать значение y, когда нет значения x.

Вместе наклон и точка пересечения линии регрессии помогают делать прогнозы о том, где на графике могут появиться новые точки.

3 примера использования кода Python



Чтобы реализовать простую линейную регрессию в Python, нам сначала нужно импортировать необходимые библиотеки:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

Далее нам нужно загрузить наши данные. Есть много наборов данных, которые можно использовать для практики линейной регрессии в scikit-learn, но некоторые популярные включают в себя:

from sklearn.datasets import fetch_california_housing, load_wine, load_diabetes

# Load California Housing Dataset
california = fetch_california_housing()

# Load Wine Quality Dataset
wine = load_wine()

# Load Diabetes Dataset
diabetes = load_diabetes()

Набор данных о жилье в Калифорнии

Мы можем использовать библиотеку Pandas для просмотра наборов данных. Во-первых, нам нужно импортировать библиотеку и создать Pandas DataFrame для каждого набора данных:

import pandas as pd

# Create a DataFrame for the California Housing dataset
df_california = pd.DataFrame(X_california, columns=california.feature_names)
df_california['target'] = y_california
df_california

Этот код создает DataFrame для набора данных «California Housing». Он использует следующие аргументы:

  • pd.DataFrame: создает объект DataFrame из предоставленных данных.
  • X_california: набор данных, содержащий независимые переменные (характеристики дома) для набора данных о жилье в Калифорнии.
  • columns: аргумент, который указывает имена столбцов в DataFrame, используяcalifornia.feature_names.
  • df_california['target']: создает новый столбец с именем «цель» в DataFrame, содержащий значения зависимой переменной (цены на жилье).
  • y_california: набор данных, содержащий значения зависимой переменной (цены на жилье).

В целом, этот код создает DataFrame, который содержит всю необходимую информацию из набора данных о жилье в Калифорнии, включая независимые переменные и зависимую переменную.

То же самое будет сделано для двух других наборов данных.

Набор данных о качестве вина

# Create a DataFrame for the Wine Quality dataset
df_wine = pd.DataFrame(X_wine, columns=wine.feature_names)
df_wine['target'] = y_wine
df_wine

Набор данных диабета

# Create a DataFrame for the Diabetes dataset
df_diabetes = pd.DataFrame(X_diabetes, columns=diabetes.feature_names)
df_diabetes['target'] = y_diabetes

Вот пример фрагмента кода, который загружает наборы данных California Housing, Wine Quality и Diabetes с помощью scikit-learn и создает массивы X и y для каждого из них:

# California Housing Dataset
X_california, y_california = california.data, california.target

# Wine Quality Dataset
X_wine, y_wine = wine.data, wine.target

# Diabetes Dataset
X_diabetes, y_diabetes = diabetes.data, diabetes.target

Тренировочный тестовый сплит

Разделите данные на наборы для обучения и тестирования:

from sklearn.model_selection import train_test_split

# Split the California dataset into training and testing sets
X_train_cali, X_test_cali, y_train_cali, y_test_cali = train_test_split(
X_california, y_california, test_size=0.2, random_state=42)

# Split the Wine dataset into training and testing sets
X_train_wine, X_test_wine, y_train_wine, y_test_wine= train_test_split(
X_wine, y_wine, test_size=0.2, random_state=42)

# Split the Diaetes dataset into training and testing sets
X_train_db, X_test_db, y_train_db, y_test_db = train_test_split(
X_diabetes, y_diabetes, test_size=0.2, random_state=42)

Приведенный выше код сначала разбивает каждый набор данных на наборы для обучения и тестирования, используя функцию train_test_split из sklearn.model_selection.

Модель линейной регрессии

Затем он создает отдельную модель LinearRegression для каждого набора данных и подгоняет модель к обучающим данным, используя метод fit.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# Create linear regression model for California Housing Dataset
model_california = LinearRegression()
model_california.fit(X_train_cali, y_train_cali)
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# Create linear regression model for Wine Quality Dataset
model_wine = LinearRegression()
model_wine.fit(X_train_wine, y_train_wine)
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# Create linear regression model for Diabetes Dataset
model_diabetes = LinearRegression()
model_diabetes.fit(X_train_db, y_train_db)

После создания моделей линейной регрессии для каждого набора данных мы можем использовать их для прогнозирования новых данных или оценки их эффективности на тестовом наборе.

мы можем использовать predict() метод модели для предсказания новых данных. Например:

# Make predictions on the California test set
y_pred_cali = model_california.predict(X_test_cali)
# Make predictions on the Wine test set
y_pred_wine = model_wine.predict(X_test_wine)
# Make predictions on the Diabetes test set
y_pred_db = model_diabetes.predict(X_test_db)

Приведенный выше код генерирует прогнозы для тестовых данных каждой из трех моделей линейной регрессии, созданных ранее.

Чтобы визуализировать или представить прогнозы, мы могли бы построить прогнозируемые значения в сравнении с фактическими значениями, используя точечную диаграмму. Это позволило бы нам визуально проверить, насколько хорошо прогнозы модели соответствуют истинным значениям.

Вот пример фрагмента кода, который мы могли бы использовать для создания точечных диаграмм для каждой из трех моделей:

import seaborn as sns
import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 3, figsize=(15, 5))

# California Housing Dataset
sns.scatterplot(x=y_test_cali, y=y_pred_cali, ax=axs[0])
axs[0].set_xlabel('True Values')
axs[0].set_ylabel('Predictions')
axs[0].set_title('California Housing')

# Wine Quality Dataset
sns.scatterplot(x=y_test_wine, y=y_pred_wine, ax=axs[1])
axs[1].set_xlabel('True Values')
axs[1].set_ylabel('Predictions')
axs[1].set_title('Wine Quality')

# Diabetes Dataset
sns.scatterplot(x=y_test_db, y=y_pred_db, ax=axs[2])
axs[2].set_xlabel('True Values')
axs[2].set_ylabel('Predictions')
axs[2].set_title('Diabetes')

plt.show()

Оценить производительность

У нас есть метод score() для оценки производительности на тестовом наборе.

Эти коды рассчитывают производительность моделей линейной регрессии на соответствующих наборах тестов для каждого набора данных. Баллы показывают, насколько хорошо модель соответствует данным и предсказывает целевую переменную.

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

Другие показатели оценки

Метод Оценка в scikit-learn — это общая метрика оценки для задач классификации и регрессии. Однако для задач регрессии другие показатели оценки, такие как среднеквадратическая ошибка (MSE), среднеквадратическая ошибка (RMSE), средняя абсолютная ошибка (MAE strong>) и R-квадрат ().

Калифорнийский счет

from sklearn.metrics import mean_squared_error, mean_absolute_error

# Evaluate the performance on the Diabetes test set
score_wine = model_wine.score(X_test_wine, y_test_wine)
print('SCORE: ', score_wine)

# Mean Squared Error (MSE) for California Housing Dataset
mse_cali = mean_squared_error(y_test_cali, y_pred_cali)
print('MSE:',mse_cali)

# Root Mean Squared Error (RMSE) for California Housing Dataset
rmse_cali = mean_squared_error(y_test_cali, y_pred_cali, squared=False)
print('RMSE:',rmse_cali)

# Mean Absolute Error (MAE) for California Housing Dataset
mae_cali = mean_absolute_error(y_test_cali, y_pred_cali)
print('MAE:',mae_cali)

# SCORE:  0.8825140263270391
# MSE: 0.5558915986952422
# RMSE: 0.7455813830127749
# MAE: 0.533200130495698

Оценка. Это показатель, показывающий, насколько хороши прогнозы модели. Если оценка равна 1,0, это означает, что прогноз совершенен. Если оценка равна 0,0, это означает, что модель не лучше, чем простое использование среднего значения значений, которые мы хотим предсказать. В случае набора данных о вине оценка 0,8825 означает, что модель хорошо прогнозировала качество вина на основе предоставленной информации.

Среднеквадратическая ошибка (MSE). Этот показатель показывает среднюю разницу между прогнозами модели и фактическими значениями. Он популярен, потому что он более строго наказывает за большие ошибки. В наборе данных о жилье в Калифорнии MSE 0,5559 означает, что в среднем прогнозы модели отклоняются примерно в 0,75 раза от стоимости дома (100 000 долларов США).

Среднеквадратическая ошибка (RMSE): это квадратный корень из MSE, измеряемый в тех же единицах, что и значения, которые мы хотим предсказать. В случае с набором данных о жилье в Калифорнии RMSE 0,7456 означает, что в среднем прогнозы модели отклоняются примерно на 7 456 долларов.

Средняя абсолютная ошибка (MAE). Этот показатель показывает среднюю абсолютную разницу между прогнозами модели и фактическими значениями. Он менее чувствителен к выбросам, чем MSE. В наборе данных о жилье в Калифорнии MAE, равный 0,5332, означает, что в среднем прогнозы модели отличаются примерно на 5332 доллара.

Наиболее подходящая метрика для использования зависит от конкретной решаемой проблемы и предпочтений разработчика модели. Оценка может дать краткий обзор производительности модели, в то время как другие показатели могут показать более подробную информацию о типах ошибок, которые делает модель. MSE и RMSE полезны, когда большие ошибки должны быть более строго наказаны, в то время как MAE более полезен, когда меньшие ошибки более приемлемы.

Винная оценка

# Evaluate the performance on the Diabetes test set
score_wine = model_wine.score(X_test_wine, y_test_wine)
print('SCORE:',score_wine)

# Mean Squared Error (MSE) for Wine Dataset
mse_wine = mean_squared_error(y_test_wine, y_pred_wine)
print('MSE:', mse_wine)

# Root Mean Squared Error (RMSE) for Wine Dataset
rmse_wine = mean_squared_error(y_test_wine, y_pred_wine, squared=False)
print('RMSE:', rmse_wine)

# Mean Absolute Error (MAE) for Wine Dataset
mae_wine = mean_absolute_error(y_test_wine, y_pred_wine)
print('MAE:', mae_wine)

# SCORE: 0.8825140263270391
# MSE: 0.06853348464256047
# RMSE: 0.2617890078719129
# MAE: 0.20304725956612993

Оценка.Оценка показывает, насколько точны прогнозы модели. Это как оценка производительности модели. Если оценка равна 1,0, это означает, что прогнозы модели идеальны. Если оценка равна 0,0, это означает, что модель не лучше, чем просто предположение. Например, оценка 0,8825 для набора данных Wine означает, что модель предсказала качество вина с точностью 88,25%.

Среднеквадратическая ошибка (MSE): измеряет, насколько прогнозируемые значения отличаются от фактических значений. Это дает вам представление о том, насколько модель «неверна» в своих прогнозах. В наборе данных Wine значение MSE, равное 0,0685, означает, что прогнозируемое качество вина в среднем отличается на 0,0685 единиц в квадрате.

Среднеквадратичная ошибка (RMSE):это квадратный корень из MSE, который дает вам представление о том, насколько прогнозируемые значения в среднем далеки от фактических значений. Это хороший способ сравнить разные модели и определить, какая из них лучше. В наборе данных Wine значение RMSE, равное 0,2618, означает, что прогнозируемое качество вина в среднем отличается на 0,2618 единицы.

Средняя абсолютная ошибка (MAE). Это похоже на RMSE, но не возводит в квадрат разницу между прогнозируемыми и фактическими значениями. Он просто смотрит, насколько далеки прогнозируемые значения от фактических значений. В наборе данных Wine значение MAE, равное 0,2030, означает, что прогнозируемое качество вина в среднем отличается на 0,2030 единиц.

Оценка диабета

# Evaluate the performance on the Diabetes test set
score_db = model_diabetes.score(X_test_db, y_test_db)
print('SCORE:',score_db)

# Mean Squared Error (MSE) for Diabetes Dataset
mse_db = mean_squared_error(y_test_db, y_pred_db)
print('MSE:', mse_db)

# Root Mean Squared Error (RMSE) for Diabetes Dataset
rmse_db = mean_squared_error(y_test_db, y_pred_db, squared=False)
print('RMSE:', rmse_db)

# Mean Absolute Error (MAE) for Diabetes Dataset
mae_db = mean_absolute_error(y_test_db, y_pred_db)
print('MAE:', mae_db)

# SCORE: 0.4526027629719195
# MSE: 2900.193628493482
# RMSE: 53.85344583676593
# MAE: 42.79409467959994

Оценка или оценка R² — это показатель того, насколько хорошо модель соответствует данным. Он варьируется от 0 до 1, где 1 указывает на идеальное соответствие. В этом случае оценка 0,45 означает, что модель способна объяснить 45% дисперсии в тестовом наборе. Это указывает на то, что модель обладает некоторой предсказательной силой, но еще есть возможности для улучшения.

Среднеквадратическая ошибка (MSE) измеряет среднеквадратичную разницу между прогнозируемыми и фактическими значениями. Другими словами, он дает представление о том, насколько далеки прогнозы модели от фактических значений. Высокий MSE означает, что прогнозы модели неточны и имеют большое отклонение от фактических значений. В этом случае значение MSE, равное 2900,1936, означает, что в среднем прогнозы модели отличаются на квадратный корень из этого значения, что составляет примерно 53,85.

Среднеквадратичная ошибка (RMSE) — это просто квадратный корень из MSE, который представляет собой среднюю разницу между прогнозируемыми и фактическими значениями в тех же единицах, что и целевая переменная. В этом случае значение RMSE 53,8534 означает, что в среднем прогнозы модели отличаются примерно на 53,85 единицы.

Средняя абсолютная ошибка (MAE) измеряет среднюю абсолютную разницу между прогнозируемыми и фактическими значениями. Это дает представление о том, насколько далеки прогнозируемые значения от фактических значений, независимо от направления разницы. В этом случае значение MAE, равное 42,7941, означает, что в среднем прогнозы модели отличаются примерно на 42,79 единицы.

Таким образом, хотя модель имеет некоторую прогностическую силу с оценкой 0,45, она имеет относительно высокие значения MSE и RMSE, что указывает на то, что ее прогнозы неточны и имеют большое отклонение от фактических значений. Значение MAE, равное 42,7941, предполагает, что предсказания модели в среднем отличаются примерно на 42,79 единицы. Таким образом, есть возможности для улучшения производительности модели.

Часто задаваемые вопросы

Что такое линейная регрессия?

Линейная регрессия — это статистический метод, который моделирует взаимосвязь между зависимой переменной и одной или несколькими независимыми переменными путем подгонки линейного уравнения к наблюдаемым данным.

Что такое scikit-learn?

Scikit-learn — это популярная библиотека машинного обучения для Python, которая предоставляет инструменты для построения и оценки моделей машинного обучения, включая линейную регрессию.

Как импортировать линейную регрессию из scikit-learn?

Чтобы импортировать линейную регрессию из scikit-learn, вы можете использовать следующий код: from sklearn.linear_model import LinearRegression

Как обучить модель линейной регрессии в scikit-learn?

Чтобы обучить модель линейной регрессии в scikit-learn, сначала необходимо создать экземпляр класса LinearRegression, а затем вызвать метод fit для данных обучения. Вот пример:

from sklearn.linear_model import LinearRegression

# Create a LinearRegression object
model = LinearRegression()

# Fit the model to the training data
model.fit(X_train, y_train)

Как оценить эффективность модели линейной регрессии?

Чтобы оценить производительность модели линейной регрессии в scikit-learn, мы можем использовать такие показатели, как среднеквадратическая ошибка (MSE), среднеквадратическая ошибка (RMSE) и средняя абсолютная ошибка (MAE). Вы также можете использовать перекрестную проверку для оценки эффективности обобщения модели. Вот пример:

from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import cross_val_score

# Make predictions on the test data
y_pred = model.predict(X_test)

# Calculate MSE and RMSE
mse = mean_squared_error(y_test, y_pred)
rmse = mean_squared_error(y_test, y_pred, squared=False)

# Calculate R^2 score
r2 = r2_score(y_test, y_pred)

# Perform 5-fold cross-validation
cv_scores = cross_val_score(model, X, y, cv=5)