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

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

Почему это называется линейной регрессией, если это полиномиальная регрессия?

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

Давайте разберемся с полиномиальной линейной регрессией, используя набор данных Position_Salaries, который доступен на Kaggle. Этот набор данных содержит 3 столбца и 10 строк с разными должностями и зарплатами.

Требуемый пакет R

Во-первых, вам необходимо установить пакет caTools и ggplot2 и загрузить библиотеку caTools и ggplot2, после чего вы сможете выполнить следующие операции.

  • Импорт библиотек
install.packages('caTools')   
install.packages('ggplot2')
library(caTools)
library(ggplot2)

Примечание. Если вы используете R studio, пакеты нужно устанавливать только один раз.

  • Импорт набора данных
dataset <- read.csv('../input/polynomial-position-salary-data/Position_Salaries.csv')
dataset <- dataset[2:3]
dim(dataset)

Функция read.csv () используется для чтения файла csv, а функция dim () используется для определения количества строк и столбцов в файле csv. В этом наборе данных столбцы Position и Level имеют одинаковое значение, поэтому мы выбираем столбец Level. Кроме того, набор данных очень мал, поэтому не разбивайте его на набор для обучения и тестирования.

Суть проблемы заключается в том, что у кандидата с уровнем 6.5 предыдущая зарплата составляла 160000. Чтобы нанять кандидата на новую должность, компания хотела бы подтвердить, честен ли он в отношении своей последней зарплаты, чтобы она могла принять решение о приеме на работу. . Для этого мы воспользуемся полиномиальной линейной регрессией, чтобы предсказать точную зарплату сотрудника.

  • Применить линейную регрессию к набору данных
linear <- lm(formula <- Salary ~ ., data <- dataset)
summary(linear)

Функция lm () используется для создания модели линейной регрессии. Если вы посмотрите на набор данных, у нас есть одна зависимая переменная зарплата и одна независимая переменная Уровень. Следовательно, обозначение formula <- Salary ~ . означает, что зарплата пропорциональна Уровню. Теперь второй аргумент принимает набор данных, на котором вы хотите обучить свою регрессионную модель. После запуска этого кода ваша регрессионная модель будет готова. Если вы проверите сводку регрессионной модели, вы увидите звездочки, а значение P не имеет большого статистического значения.

  • Применить к набору данных полиномиальную регрессию
dataset$Level2 <- dataset$Level^2
dataset$Level3 <- dataset$Level^3
dataset$Level4 <- dataset$Level^4
polynomial <- lm(formula = Salary ~ ., data <- dataset)
summary(polynomial)

Теперь с помощью функции lm () создается модель полиномиальной линейной регрессии. Точность полиномиальной линейной регрессии увеличивается с увеличением степени полинома. Сравните сводку моделей линейной и полиномиальной регрессии и обратите внимание на разницу.

  • Визуализируйте результаты линейной регрессии
ggplot() +
geom_point(aes(x <- dataset$Level, y <- dataset$Salary), colour = 'red') +
geom_line(aes(x <- dataset$Level, y <- predict(linear, dataset)), colour = 'blue') +
ggtitle('Linear Regression') +
xlab('Level') +
ylab('Salary')

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

  • Визуализируйте результаты полиномиальной регрессии
ggplot() +
geom_point(aes(x <- dataset$Level, y <- dataset$Salary), colour = 'red') +
geom_line(aes(x <- dataset$Level, y <- predict(polynomial, dataset)), colour = 'blue') +
ggtitle('Polynomial Regression') +
xlab('Level') +
ylab('Salary')

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

  • Визуализируйте результаты модели регрессии для более высокого разрешения и более плавной кривой
x_grid = seq(min(dataset$Level), max(dataset$Level), 0.1)
ggplot() +
geom_point(aes(x <- dataset$Level, y <- dataset$Salary), colour = 'red') +
geom_line(aes(x <- x_grid, y <- predict(polynomial, data.frame(Level = x_grid, 
                                                               Level2 = x_grid^2,
                                                               Level3 = x_grid^3,
                                                               Level4 = x_grid^4))),colour = 'blue') +
ggtitle('Polynomial Regression') +
xlab('Level') +
ylab('Salary')

Когда вы увеличиваете степень полинома, это дает более высокое разрешение, более плавную кривую и более высокую точность.

  • Прогнозирование нового результата с помощью линейной регрессии
predict(linear, data.frame(Level <- 6.5))

Этот код предсказывает зарплату, связанную с уровнем 6.5 в соответствии с моделью линейной регрессии, но он дает нам довольно далекое предсказание до 160 тысяч, так что это неточный прогноз.

  • Предсказание нового результата с помощью полиномиальной регрессии
predict(polynomial, data.frame(Level <- 6.5,
                             Level2 <- 6.5^2,
                             Level3 <- 6.5^3,
                             Level4 <- 6.5^4))

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

Код доступен в моей учетной записи GitHub.

Предыдущая часть серии part1 и part2 охватывала линейную регрессию и множественную линейную регрессию.

Если вам понравился блог или он оказался полезным, пожалуйста, оставьте аплодисменты!

Спасибо.