Введение
Линейная регрессия — это статистический метод, который используется для поиска линейной зависимости между зависимой и одной или несколькими независимыми переменными. Этот метод применим для задач контролируемой регрессии обучения, когда мы пытаемся предсказать непрерывную переменную. Линейную регрессию можно разделить на два типа — простую и множественную линейную регрессию. В этом проекте я использовал метод простой линейной регрессии, в котором у меня есть одна независимая и одна зависимая переменная.
Простая реализация линейной регрессии с использованием Python
Постановка задачи: построить простую модель линейной регрессии для прогнозирования продаж на основе денег, потраченных на рекламу на телевидении.
Импорт библиотек
# Importing the libraries import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error #error calculation from sklearn.metrics import r2_score #error calculation
Импорт набора данных
# Importing the Dataset data=pd.read_csv('Salesdata.csv') data.info()
data.head()
Проверить выбросы
sns.boxplot(data['Newspaper'])
sns.boxplot(data['TV'])
sns.boxplot(data['Radio'])
Из переменных нет выбросов, поэтому давайте перейдем к разделу корреляции.
Корреляция
# Let's see the correlation between different variables sns.heatmap(data.corr(),cmap="magma_r",annot=True) plt.show()
На тепловой карте переменная TV больше всего коррелирует с продажами.
Итак, давайте возьмем и выполним линейную регрессию, используя TV в качестве нашей характеристической переменной и удалим другие переменные. Давайте установим для переменной TV значение X, а для переменной Sales значение Y.
X=data['TV'] Y=data['Sales'] xval=X.values yval=Y.values x=xval.reshape(-1,1) y=yval.reshape(-1,1)
Реализация линейной модели
Уравнение линейной регрессии
y=c+m1x1+m2x2+…+mnxn
y — это ответ
c — точка пересечения
m1 — коэффициент для первого признака
mn — коэффициент для n-го признака
В нашем проекте:
y=c+m1×TV
Значения m называются коэффициентами модели или параметрами модели.
# Splitting the dataset into the Training set and Test set X_train,X_test,Y_train,Y_test=train_test_split(x,y,test_size=1/3,random_state=0) lin_reg=LinearRegression(normalize=True) lin_reg.fit(X_train,Y_train) print(lin_reg.intercept_) # Predicting the Test set results test_pred = lin_reg.predict(X_test)
Визуализируйте результат набора поездов
# Visualising the train set results plt.scatter(X_train, Y_train, color = '#88c939') plt.plot(X_train, lin_reg.predict(X_train), color = 'green')
Визуализируйте результат набора тестов
# Visualising the Test set results plt.scatter(X_test, Y_test, color = '#88c939') plt.plot(X_train, lin_reg.predict(X_train), color = 'blue') plt.title('Sales Price Prediction (Test set)') plt.xlabel('TV') plt.ylabel('Sales') plt.show()
Оценить модель
#Evaluating the Model score=r2_score(Y_test,test_pred) print("R2 Score is =",score) #printing the accuracy print("MSE is =",mean_squared_error(Y_test,test_pred)) print("RMSE of is =",np.sqrt(mean_squared_error(Y_test,test_pred)))
R Squared:R Square — это коэффициент детерминации. Он говорит нам, сколько точек приходится на линию регрессии. Значение R Square равно 80, что указывает на то, что 81% данных соответствуют регрессионной модели.
Предсказать заданное значение
#Predict the Sales for TV value 300,100,150 lin_reg.predict([[300],[100],[150]])
Заключение
Надеюсь, вы научились применять алгоритм простой линейной регрессии для прогнозирования цен. Наша модель работает хорошо, так как 80% данных соответствуют регрессионной модели.
Полный код здесь:https://github.com/DharmarajPi/Linear-Regression-Sales-Price-Prediction
Github: https://github.com/DharmarajPi