Здравствуйте, меня зовут Аамир, и я поделюсь своими знаниями о простой линейной регрессии. Мы пройдем следующие части:

  1. Что такое простая линейная регрессия?
  2. Оценка ошибок и оптимизация
  3. R-квадратный счет
  4. Реализация на Python

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

1.1 Линейная регрессия

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

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

Эти предположения перечислены ниже:

Мы будем представлять x как набор предикторов и y как нашу переменную ответа.

  • Линейная зависимость между x и y.
  • Каждое наблюдение является независимым.
  • Дисперсия остатка такая же, как и для любого значения x (гомоскедастичность)
  • Распределение должно быть нормальным.

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

Термин «простой» означает использование только одной переменной-предиктора. Уравнение простой линейной регрессии:

Здесь,

это наклон линии. Если это +ve, отношение b/w x и y увеличивается, иначе уменьшается, если меньше 0.

это перехват; значение y, когда x=0.

это всеобъемлющая ошибка, которая компенсирует любую ошибку, допущенную при измерении или иным образом

Оптимальные значения beta0 и beta1 используются для прогнозов, и мы узнаем, как их получить, в разделе 2.

2. Оценка ошибок и оптимизация

В этом разделе мы узнаем об оценке ошибок и оптимизации.

Сначала мы оцениваем наш выход E (y) и будем использовать среднеквадратичную ошибку в качестве оценки ошибки. Ее также называют функцией потерь, определяемой формулой:

Теперь, если вы подставите 2 в 1 из приведенного выше и решите частную производную MSE относительно бета0 и бета1 и проверите локальные минимумы с первой полученной производной,

Наша функция потерь будет оптимальной для этих значений E(beta0) и E(beta1), и, следовательно, они также будут нашими оптимальными оценками.

3. Оценка в квадрате R

Акк. в Википедии, R в квадрате определяется как:

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

Он говорит нам, насколько хороша наша модель. Ниже вы можете найти классификацию моделей на основе оценки r в квадрате:

R²=0, ваша модель прогнозирует так же хорошо, как и среднее значение y.

R²=1, ваша модель идеальна.

Значения R² обычно находятся в диапазоне от [0,1], но могут быть и отрицательными,

когда мы сравниваем нашу модель с набором тестовых данных

4. Реализация на Python

Мы будем смотреть на набор данные о зарплате, где у нас есть два столбца: годы опыта и зарплата. Мы регрессируем зарплату в зависимости от многолетнего опыта.

Сначала мы импортируем все важные библиотеки:

#Import the necessary Libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
%matplotlib inline

Теперь давайте загрузим и посмотрим на фрейм данных:

#Read The Data Set 
df=pd.read_csv('Salary_Data.csv')
#View your data 
df.head(5)
#It returns the first five values

Следующий шаг — визуализировать наш набор данных, построив график рассеяния:

#Draw a scatter Plot to see relationship between the variables
x=df[['YearsExperience']].values # predictor 
y=df['Salary'].values #response or output variable
plt.scatter(x,y)
plt.xlabel('Years of Experience' ,fontsize=20)
plt.ylabel('Salary',fontsize=20)
plt.title('Scatter Plot')

После построения набора данных давайте разделим его на наборы тестовых и обучающих данных, мы будем использовать функцию sklearns train_test_split и получим случайный набор обучающих и тестовых данных. Мы будем использовать 70% данных в качестве набора поездов и 30% в качестве тестового набора.

#Split Data set 
x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7)

Теперь построим нашу регрессионную модель:

#Model Developement 
lr=LinearRegression()
model=lr.fit(x_train,y_train)
print('The Coefficients for this model is ',model.coef_)
#For Train Data 
y_train_pred=model.predict(x_train)
mse_train=mean_squared_error(y_train,y_train_pred)

#For Test Data 
y_test_pred=model.predict(x_test)
mse_test=mean_squared_error(y_test,y_test_pred)

Ура! Давайте посмотрим на график нашей линии регрессии и фактических точек данных:

fig,ax=plt.subplots(figsize=(8,8))
ax.scatter(x,y,label='Original Data')
plt.plot(x_test,y_test_pred,color='red',label='Predictions')
plt.xlabel('Years of Experience' ,fontsize=20)
plt.ylabel('Salary',fontsize=20)
plt.title('Simple Linear Regression',fontsize=22)
ax.legend()

Наша линия регрессии отлично подходит для данных. Двигаясь вперед, хочу проверить, насколько хороша наша модель. Что нам нужно сделать, чтобы узнать это? Да, оценка R², давайте посчитаем:

#Calculating R^2 Score
print(r2_score(y_test,y_test_pred))

Получилось 0,952, помните, чем ближе R² к 1, тем лучше модель.

Вы можете найти код здесь, на Github.

Я новичок в машинном обучении, и если есть какие-либо ошибки или отзывы, которые вы хотите добавить, не стесняйтесь добавлять.