使用R语言glmnet包进行正则化lasso回归

正则化的原理是尽可能多的将数据中的特征塞进最终模型,特征越多越可以更好地解释数据集的错综复杂。在应用正则化后,每个特征对模型部分的解释程度可能完全不同。通过使用正则化可以减少数据集的噪声,这些噪声可能来对最终模型几乎没有形象的特征。为了利用这种正则化技术,可以调用特定类型的回归模型,称为套索回归(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
相关推荐
enjoy嚣士14 小时前
Java 之 实现C++库函数等价函数遇到的问题
java·开发语言·c++
毕设源码-郭学长14 小时前
【开题答辩全过程】以 基于java的停车管理系统的设计与实为例,包含答辩的问题和答案
java·开发语言
MaoziShan14 小时前
CMU Subword Modeling | 09 Lexemes, or What Dictionaries Know about Morphology
开发语言·人工智能·机器学习·语言模型·自然语言处理·c#
柴郡猫乐园14 小时前
JDK中一个单例模式的实现
java·开发语言·单例模式
闻哥14 小时前
ConcurrentHashMap 1.7 源码深度解析:分段锁的设计与实现
java·开发语言·jvm·spring boot·面试·jdk·hash
Ivanqhz14 小时前
半格与数据流分析的五个要素(D、V、F、I、Λ)
开发语言·c++·后端·算法·rust
liann11914 小时前
4.3.2_WEB——WEB后端语言——PHP
开发语言·前端·网络·安全·web安全·网络安全·php
元让_vincent14 小时前
DailyCoding C++ | SLAM里的“幽灵数据”:从一个未初始化的四元数谈C++类设计
开发语言·c++·slam·构造函数·类设计·激光里程计
啊辉的科研15 小时前
植物单细胞RNA-seq分析教程3-2025年版
linux·r语言
A9better15 小时前
C++——指针与内存
c语言·开发语言·c++·学习