一、概述
「L2正则化(也称为岭回归)」 是一种用于线性回归模型的正则化方法,它通过在模型的损失函数中添加一个惩罚项来防止过拟合。L2正则化的惩罚项是模型参数的平方和,乘以一个正则化参数λ,即:
L2正则化参数 = λ * (模型参数的平方和)
其中,λ是一个超参数,用于控制正则化的强度。
「L2正则化」的作用是通过惩罚较大的模型参数,使得模型更加平滑,减少模型的复杂性,从而提高模型的泛化能力。L2正则化可以防止过拟合,特别是当训练数据集较小或者存在多重共线性时,L2正则化可以提高模型的性能。
二、数据集
首先,我们加载数据集:
data(mtcars)
head(mtcars)
# 输出结果
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
三、岭回归
在R语言中,可以使用linearRidge
函数进行岭回归分析,并使用summary
函数查看结果。当使用岭回归时,正则化参数λ对于问题的解来说是至关重要的。在岭回归中,随着λ的增加,模型的复杂度减小,使得参数变得更加稳定和显著。因此,当λ的值越大时,岭回归系数也越大,并且具有更高的显著性,这可能是与您观察到的结果相关的原因。
# 使用linearRidge函数进行岭回归分析
install.packages("ridge")
library(ridge)
library(MASS)
library(ggplot2)
# 使用mtcars数据集
data(mtcars)
# 生成自变量和因变量
X <- as.matrix(mtcars[, -1])
y <- mtcars[, 1]
# 岭回归
fit <- linearRidge(mpg ~ ., data = mtcars, lambda = 0.1)
# 计算系数的标准误
fit.se <- sqrt(diag(solve(t(X) %*% X + fit$lambda * diag(ncol(X)))))
fit$se <- fit.se
# 将标准误为0的值替换为1e-10
fit.se[fit.se==0] <- 1e-10
# 计算系数的P值
t_value <- fit$coef / fit$se
df <- nrow(X) - ncol(X)
p_value <- 2 * pt(abs(t_value), df = df, lower.tail = FALSE)
# 将系数、标准误和P值合并到一个数据框中
result <- data.frame(lambda = fit$lambda, coef = fit$coef, se = fit$se, p_value = p_value)
result
# 绘制岭回归系数的棒图
ggplot(result, aes(x = 1:length(fit$coef), y = coef, fill = p_value < 0.05)) +
geom_bar(stat = "identity", width = 0.5, color = "black") +
geom_errorbar(aes(ymin = coef - se, ymax = coef + se), width = 0.2) +
theme_bw() +
labs(title = "Ridge Regression Coefficients and Standard Errors",
x = "Variable Index", y = "Coefficient")
执行结果展示:
lambda coef se p_value
cyl 0.1 -2.656036 0.287385523 4.964885e-09
disp 0.1 -1.656252 0.006615594 1.669437e-39
hp 0.1 -4.906065 0.008149868 6.939783e-48
drat 0.1 2.926048 0.547854611 2.316967e-05
wt 0.1 -9.921048 0.690973553 1.180421e-12
qsec 0.1 2.894217 0.170656138 4.054759e-14
vs 0.1 1.409633 0.764781699 7.881732e-02
am 0.1 5.773137 0.730119979 7.162408e-08
gear 0.1 2.561253 0.503370358 4.256271e-05
carb 0.1 -5.980529 0.304172379 1.902781e-15
-
lambda:lambda 是在岭回归中用于正则化的超参数,控制模型的复杂度,同时也影响模型选择哪些自变量。在岭回归过程中,我们用一系列 lambda 值来建立一系列模型,并通过交叉验证等方法来确定最佳的 lambda 值,以保证模型的泛化能力和预测能力。
-
coef:coef 表示岭回归模型中各个参数的系数估计值。它们表示模型对于每个自变量的预测权重,即每个自变量对因变量的影响程度。
-
se:se 是系数估计值的标准错误,用于表示对于某一自变量的系数估计,其真实值与样本估计值之间的偏离程度。标准误差越小,说明该系数估计值越可靠。
-
p_value:p-value 表示在假设检验中对应的概率值,通常用于衡量某一自变量的系数估计值在统计意义下是否显著不为 0。一般情况下,p-value < 0.05 表示该自变量的系数估计值能够显著区别于 0,即该变量对因变量有着显著影响。
该图显示了岭回归模型的系数估计值,每个自变量的估计值用一个棒图表示。棒图中心的水平线表示该自变量的估计值,棒图的长度表示该估计值的标准误。估计值的颜色表示相应的 p-value 显著性检验结果,绿色表示 p-value >= 0.05,红色表示 p-value < 0.05。从图中可以看出,am、hp、wt 和 gear 这四个自变量在岭回归中对 mpg 有显著的影响,其余的自变量的系数估计值非常接近于零,说明它们对 mpg 的影响可以忽略不计。由于使用了岭回归,这表明偏差-方差折衷的技术可以对模型偏差进行约束并选择出最相关的特征。
「预测结果和实际值的比较:」
# 预测新数据
newdata <- data.frame(mtcars[, -1])
newdata$ridge_pred <- predict(fit, newdata)
# 将预测结果添加到原始数据集上
mtcars$ridge_pred <- predict(fit, mtcars[, -1])
# 绘制实际值和预测值的散点图
ggplot(mtcars, aes(x = mpg, y = ridge_pred)) +
geom_point() +
geom_line(aes(x = mpg, y = mpg), color = "red") +
theme_bw() +
labs(title = "Ridge Regression Prediction Results",
x = "Actual mpg", y = "Predicted mpg")
可以看到,这个预测结果和实际结果相差还是不大的,几乎在线的左右,有一定的预测价值。
四、总结
岭回归在实际应用中,常用于以下场景:
-
「数据预处理」:在数据预处理阶段,可以使用岭回归来解决多重共线性问题,提高模型的稳定性和效果。
-
「特征选择」:岭回归可以用于特征选择,通过调整正则化参数,可以控制模型系数的大小,对无关自变量的系数进行惩罚,进而筛选出对模型解释力度高的重要特征。
-
「预测建模」:岭回归也可以用于预测建模,通过适当地调整正则化参数可以控制模型的复杂度,同时避免过拟合问题,提高模型的泛化能力。
总之,岭回归是一个广泛应用于回归问题的经典模型,具有良好的解释性和稳定性,是数据科学和机器学习领域中必不可少的工具之一。
末尾,我们提一个问题哈,lambda这个值怎么选比较合理?采用什么算法来选择?如果有想了解的,欢迎关注和私信我。