Рубрики

Практический подход к простой линейной регрессии с использованием R

Простая линейная регрессия — это статистический метод, который позволяет нам обобщать и изучать отношения между двумя непрерывными (количественными) переменными. Одна переменная, обозначенная x, рассматривается как независимая переменная, а другая, обозначенная y, рассматривается как зависимая переменная. Предполагается, что две переменные линейно связаны. Следовательно, мы пытаемся найти линейную функцию, которая предсказывает значение отклика (y) настолько точно, насколько это возможно, как функцию признака или независимой переменной (x).

Простейшая форма уравнения регрессии с одной зависимой и одной независимой переменной определяется по формуле:

y = c + b * x

where:
y = estimated dependent variable score,
c = constant, b = regression coefficient, and
x = score on the independent variable.

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

Общая идея регрессии заключается в рассмотрении двух вещей —

  1. Хороший ли набор переменных предикторов в прогнозировании исходной (зависимой) переменной?
  2. Какие переменные, в частности, являются значимыми предикторами исходной переменной и каким образом они — обозначенные величиной и знаком бета-оценок — влияют на выходную переменную?

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

Теперь мы должны реализовать подход линейной регрессии к одному из наших наборов данных. Набор данных, который мы используем здесь, является набором данных о зарплате какой-либо организации, которая определяет свою зарплату на основе количества лет, в течение которых сотрудник работал в организации. Итак, нам нужно выяснить, существует ли какая-либо связь между количеством лет, в течение которых сотрудник проработал, и заработной платой, которую он / она получает. Затем мы собираемся проверить, что модель, которую мы сделали для обучающего набора данных, работает нормально с тестовым набором данных или нет.

Шаг 1:
Первое, что вам нужно сделать, это загрузить набор данных отсюда .

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

Шаг 2:
Следующее — открыть R studio, так как мы собираемся реализовать регрессию в R среде.

Шаг № 3: Теперь на этом шаге мы будем иметь дело со всей операцией, которую мы собираемся выполнить в R studio. Команды с их кратким объяснением следующие:

Загрузка набора данных —
Первый шаг — установить рабочий каталог. Рабочий каталог — это каталог, в котором вы в данный момент работаете. setwd() используется для установки рабочего каталога.

setwd("C:/Users/hp/Desktop")

Теперь мы собираемся загрузить набор данных в R studio. В этом случае у нас есть файл CSV (значения, разделенные запятыми), поэтому мы собираемся использовать read.csv() для загрузки набора данных Salary_Data.csv в среду R. Кроме того, мы собираемся присвоить набор данных переменной, и здесь предположим, что давайте возьмем имя переменной как.

raw_data <- read.csv("Salary_Data.csv")

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

raw_data

Шаг № 4: Разделение набора данных.

Теперь мы собираемся разделить набор данных на набор обучающих данных и набор тестовых данных.

Training data, also called AI training data, training set, training dataset, or learning set — is the information used to train an algorithm. The training data includes both input data and the corresponding expected output. Based on this “ground truth” data, the algorithm can learn how to apply technologies such as neural networks, to learn and produce complex results, so that it can make accurate decisions when later presented with new data.

Testing data, on the other hand, includes only input data, not the corresponding expected output. The testing data is used to assess how well your algorithm was trained, and to estimate model properties.

Для разделения мы должны установить caTools package и импортировать библиотеку caTools .

install.packages('caTools')
library(caTools)

Теперь мы установим семя. Когда мы разделим весь набор данных на набор обучающих данных и набор тестовых данных, то это начальное число позволит нам сделать те же разделы в наборах данных.

set.seed(123)

Теперь, после установки начального числа, мы наконец разделим набор данных. Как правило, рекомендуется разбивать набор данных в соотношении 3: 1. То есть 75% исходного набора данных будет нашим обучающим набором данных, а 25% исходного набора данных будет нашим тестовым набором данных. Но здесь, в этом наборе данных, у нас всего 30 строк. Таким образом, более целесообразно разрешить 20 строк (т.е. 2/3 части) для набора обучающих данных и 10 строк (т.е. 1/3 части) для набора тестовых данных.

split = sample.split(raw_data$Salary, SplitRatio = 2/3)

Здесь sample.split() — это функция, которая разбивает исходный набор данных. Первый аргумент этой функции обозначает, по какому столбцу мы хотим разделить наш набор данных. Здесь мы сделали разбиение на основе столбца Зарплата. SplitRatio определяет часть, которая будет выделена для обучающего набора данных.

Теперь подмножество с split = TRUE будет назначено набору обучающих данных, а подмножество с split = FALSE будет назначено тестовому набору данных.

training_set 

 
Step #5: Fitting the Linear Simple Regression to the Training Dataset.

Now, we will make a linear regression model that will fit our training dataset. lm() function is used to do so. lm() is used to fit linear models. It can be used to carry out regression, single stratum analysis of variance and analysis of covariance.

regressor = lm(formula = Salary ~ YearsExperience, data = training_set)

По сути, для функции lm() есть ряд аргументов, но здесь мы не собираемся использовать их все. Первый аргумент определяет формулу, которую мы хотим использовать для установки нашей линейной модели. Ее, мы использовали годы опыта в качестве независимой переменной, чтобы предсказать зависимую переменную, которая является зарплатой. Второй аргумент указывает, какой набор данных мы хотим передать регрессору для построения нашей модели. Мы собираемся использовать набор обучающих данных для подачи регрессора.

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

summary(regressor)

Шаг № 6: Прогнозирование наилучшего набора результатов

Теперь пришло время предсказать результаты тестового набора на основе модели, которую мы создали для обучающего набора данных. Функция predict() используется для этого. Первый аргумент, который мы передали в функцию - это модель. Здесь модель регрессора. Второй аргумент - это новые данные, которые указывают, на каком наборе данных мы хотим реализовать нашу обученную модель, и прогнозируем результаты нового набора данных. Здесь мы взяли test_set, на котором мы хотим реализовать нашу модель.

y_pred = predict(regressor, newdata = test_set)

Шаг № 7: Визуализация результатов обучения

Мы собираемся визуализировать результаты тренировочного набора. Для этого мы будем использовать библиотеку ggplot2 . ggplot2 - это система декларативного создания графики, основанная на грамматике графики. Вы предоставляете данные, сообщаете ggplot2 как отобразить переменные в эстетику, какие графические примитивы использовать, и он позаботится о деталях.

library(ggplot2)

  

ggplot() +

  geom_point(aes(x = training_set$YearsExperience,

                 y = training_set$Salary), colour = 'red') +

  geom_line(aes(x = training_set$YearsExperience, 

                y = predict(regressor, newdata = training_set)),

               colour = 'blue') +

  ggtitle('Salary vs Experience (Training Set)') +

           xlab('Years of Experience') +

           ylab('Salary')

Выход:

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

Шаг № 8: Визуализация результатов тестового набора

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

library(ggplot2)

ggplot() +

  geom_point(aes(x = test_set$YearsExperience,

                 y = test_set$Salary),

                colour = 'red') +

  geom_line(aes(x = training_set$YearsExperience, 

                y = predict(regressor, newdata = training_set)),

                colour = 'blue') +

  ggtitle('Salary vs Experience (Test Set)') +

  xlab('Years of Experience') +

  ylab('Salary')

Выход:

Давайте посмотрим полный код для R и Python -

р

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

  
# Импорт набора данных

dataset = read.csv('Salary_Data.csv')

  
# Разделение набора данных на тренировочный набор и тестовый набор

install.packages('caTools')

library(caTools)

set.seed(123)

  

split = sample.split(dataset$Salary, SplitRatio = 2/3)

training_set = subset(dataset, split == TRUE)

test_set = subset(dataset, split == FALSE)

  
# Подгонка простой линейной регрессии к обучающему набору

regressor = lm(formula = Salary ~ YearsExperience,

data = training_set)

  
# Прогнозирование результатов тестового набора

y_pred = predict(regressor, newdata = test_set)

  
# Визуализация результатов обучения

library(ggplot2)

ggplot() +

geom_point(aes(x = training_set$YearsExperience,

              y = training_set$Salary),

              colour = 'red') +

geom_line(aes(x = training_set$YearsExperience,

              y = predict(regressor, newdata = training_set)),

              colour = 'blue') +

ggtitle('Salary vs Experience (Training set)') +

xlab('Years of experience') +

ylab('Salary')

  
# Визуализация результатов тестового набора

library(ggplot2)

ggplot() +

geom_point(aes(x = test_set$YearsExperience, y = test_set$Salary),

colour = 'red') +

geom_line(aes(x = training_set$YearsExperience,

              y = predict(regressor, newdata = training_set)),

colour = 'blue') +

ggtitle('Salary vs Experience (Test set)') +

xlab('Years of experience') +

ylab('Salary')

питон

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

  
# Импорт библиотек

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

  
# Импорт набора данных

dataset = pd.read_csv('Salary_Data.csv')

X = dataset.iloc[:, :-1].values

y = dataset.iloc[:, 1].values

  
# Разделение набора данных на тренировочный набор и тестовый набор

from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(

            X, y, test_size = 1/3, random_state = 0)

  
# Подгонка простой линейной регрессии к обучающему набору

from sklearn.linear_model import LinearRegression

regressor = LinearRegression()

regressor.fit(X_train, y_train)

  
# Прогнозирование результатов тестового набора

y_pred = regressor.predict(X_test)

  
# Визуализация результатов обучения

plt.scatter(X_train, y_train, color = 'red')

plt.plot(X_train, regressor.predict(X_train), color = 'blue')

plt.title('Salary vs Experience (Training set)')

plt.xlabel('Years of Experience')

plt.ylabel('Salary')

plt.show()

  
# Визуализация результатов тестового набора

plt.scatter(X_test, y_test, color = 'red')

plt.plot(X_train, regressor.predict(X_train), color = 'blue')

plt.title('Salary vs Experience (Test set)')

plt.xlabel('Years of Experience')

plt.ylabel('Salary')

plt.show()

Рекомендуемые посты:

Практический подход к простой линейной регрессии с использованием R

0.00 (0%) 0 votes