Здравствуйте, меня зовут Аамир, и я поделюсь своими знаниями о простой линейной регрессии. Мы пройдем следующие части:
- Что такое простая линейная регрессия?
- Оценка ошибок и оптимизация
- R-квадратный счет
- Реализация на 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.
Я новичок в машинном обучении, и если есть какие-либо ошибки или отзывы, которые вы хотите добавить, не стесняйтесь добавлять.