正则化的原理是尽可能多的将数据中的特征塞进最终模型,特征越多越可以更好地解释数据集的错综复杂。在应用正则化后,每个特征对模型部分的解释程度可能完全不同。通过使用正则化可以减少数据集的噪声,这些噪声可能来对最终模型几乎没有形象的特征。为了利用这种正则化技术,可以调用特定类型的回归模型,称为套索回归(lasso regression),此处使用的R语言自带的数据集mtcars数据集。
原书(Introduction to Machine Learning with R)使用的是lasso2包的l1ce()函数,此包已弃用,采用从历史文档手动安装的方式无法与现在的R版本匹配,故改用glmnet包的cv.glmnet函数。
R
library(glmnet)
# 选择特征和设置响应变量
#可改成(mpg ~ wy + cyl)
x <- model.matrix(mpg ~ ., data = mtcars)[, -1]
y <- mtcars$mpg
# 执行Lasso交叉验证
cv_fit <- cv.glmnet(x, y, alpha = 1)
# 根据最小MSE选择lambda值
optimal_lambda <- cv_fit$lambda.min
# 拟合最终Lasso模型
lasso_model <- glmnet(x, y, alpha = 1, lambda = optimal_lambda)
print(coef(lasso_model))
print(cv_fit)
输出:
R
11 x 1 sparse Matrix of class "dgCMatrix"
s0
(Intercept) 36.44441107
cyl -0.89269853
disp .
hp -0.01282277
drat .
wt -2.78337592
qsec .
vs .
am 0.01364372
gear .
carb .
Call: cv.glmnet(x = x, y = y, alpha = 1)
Measure: Mean-Squared Error
Lambda Index Measure SE Nonzero
min 0.6648 23 9.718 3.588 4
1se 1.6854 13 13.302 6.501 3