R语言 多项式回归
多项式 回归是线性回归的一种形式,其中自变量x和因变量y之间的关系被建模为n次方的多项式。多项式回归适合x的值和y的相应条件平均值之间的非线性关系,表示为E(y|x)。基本上它在回归中加入了二次或多项式条款。一般来说,这种回归适用于一个结果变量和一个预测变量。
多项式回归的必要性
- 与线性数据集不同的是,如果人们试图在没有任何修改的情况下将线性模型应用于非线性数据集,那么就会出现一个非常不理想和激烈的结果。
- 这可能会导致损失函数的增加,准确性的下降和高错误率。
- 与线性模型不同,多项式模型涵盖更多的数据点。
多项式回归的应用
一般来说,多项式回归被用于以下情况。
- 组织的生长率。
- 与疾病有关的流行病的进展。
- 湖泊沉积物中碳的同位素的分布现象。
R语言 多项式回归的解释
多项式回归也被称为多项式线性回归,因为它依赖于线性排列的系数而不是变量。在R语言中,如果一个人想实现多项式回归,那么他必须安装以下包。
- tidyverse 包,用于更好的可视化和操作。
- caret 包,使机器学习的工作流程更加顺畅和容易。
在正确安装软件包后,人们需要正确设置数据。为此,首先需要将数据分成两组(训练组和测试组)。然后,人们可以将数据可视化为各种图表。在R语言中,为了拟合多项式回归,首先需要使用 set.seed(n) 函数生成伪随机数。
多项式回归在回归方程中加入多项式或二次式,如下所示。
**medv = b0 + b1 * lstat + b2 * lstat 2 **
其中
mdev: 是房屋价值的中位数
lstat: 是预测变量
在R语言中,要创建一个预测变量x2 ,应该使用函数 I() ,如下所示: **I(x 2 )。 **这就把x提高到2的幂。多项式回归可以在R中进行计算,如下所示。
lm(medv ~ lstat + I(lstat^2), data = train.data)
在下面这个例子中,我们以MASS包的波士顿数据集为例。
例子
# R program to illustrate
# Polynomial regression
# Importing required library
library(tidyverse)
library(caret)
theme_set(theme_classic())
# Load the data
data("Boston", package = "MASS")
# Split the data into training and test set
set.seed(123)
training.samples <- Bostonmedv %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- Boston[training.samples, ]
test.data <- Boston[-training.samples, ]
# Build the model
model <- lm(medv ~ poly(lstat, 5, raw = TRUE),
data = train.data)
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
modelPerfomance = data.frame(
RMSE = RMSE(predictions, test.datamedv),
R2 = R2(predictions, test.data$medv)
)
print(lm(medv ~ lstat + I(lstat^2), data = train.data))
print(modelPerfomance)
输出
Call:
lm(formula = medv ~ lstat + I(lstat^2), data = train.data)
Coefficients:
(Intercept) lstat I(lstat^2)
42.5736 -2.2673 0.0412
RMSE R2
1 5.270374 0.6829474
多项式回归的图形绘制
在R语言中,如果想为实现多项式回归产生的输出绘制图表,可以使用 ggplot() 函数。
例子
# R program to illustrate
# Graph plotting in
# Polynomial regression
# Importing required library
library(tidyverse)
library(caret)
theme_set(theme_classic())
# Load the data
data("Boston", package = "MASS")
# Split the data into training and test set
set.seed(123)
training.samples <- Bostonmedv %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- Boston[training.samples, ]
test.data <- Boston[-training.samples, ]
# Build the model
model <- lm(medv ~ poly(lstat, 5, raw = TRUE), data = train.data)
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
data.frame(RMSE = RMSE(predictions, test.datamedv),
R2 = R2(predictions, test.data$medv))
ggplot(train.data, aes(lstat, medv) ) + geom_point() +
stat_smooth(method = lm, formula = y ~ poly(x, 5, raw = TRUE))
输出