R语言glmnet包分别拟合二分类logistic模型的lasso回归和岭回归

文摘   2024-12-27 22:51   山东  
什么是lasso回归?

‌Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)是一种线性回归模型,通过引入L1正则化(即Lasso惩罚项),对模型中的系数进行压缩,使某些系数缩减至零,从而实现特征选择和模型稀疏性‌‌。Lasso回归由Robert Tibshirani提出,主要用于处理变量过多而样本量较少的情况,能够有效防止过拟合并解决多重共线性问题‌。




Lasso回归的基本原理

Lasso回归通过在目标函数中添加一项L1正则化项,即变量系数的绝对值之和,来压缩模型。这使得一些系数变为零,从而实现特征选择和模型稀疏性。具体来说,Lasso回归的优化目标函数如下:

[ \min_{\beta} \left( \sum_{i=1}^n (y_i - x_i^T \beta)^2 + \alpha \sum_{j=1}^p |\beta_j| \right) ]

其中,( n ) 是样本数量,( p ) 是特征数量,( y_i ) 是实际观测值,( x_i^T \beta ) 是预测值,( \beta ) 是模型参数(系数),( \alpha ) 是L1正则化项的权重‌。







    Lasso回归的应用场景和优缺点

‌应用场景‌:

‌一、特征选择‌:Lasso回归可以用于选择最重要的特征,通过将不重要的特征系数缩减为零,简化模型并提高模型的泛化能力‌。

‌二、多重共线性问题‌:在存在多重共线性的情况下,Lasso回归可以通过将相关变量的系数变为零来降低其对回归结果的影响‌。

‌三、预测建模‌:在医学研究中,Lasso回归可以选择最相关的指标和变量,建立高效的预测模型‌。

‌Lasso回归的优点‌:

1.‌特征选择‌:能够有效进行变量选择,特别是在预测变量数量远大于样本量的情况下‌。

2.‌防止过拟合‌:通过压缩系数,避免模型过于复杂,提高模型的泛化能力‌。

‌Lasso回归的缺点‌:

1.‌计算复杂度较高‌:由于L1正则化的非光滑性,优化过程较为复杂,计算成本较高‌。

2.‌稳定性问题‌:由于某些系数可能完全为零,模型的稳定性可能受到影响‌。





什么是岭回归?

岭回归(Ridge Regression)‌是一种用于处理多重共线性的有偏估计回归方法,它通过在普通最小二乘法的基础上加入L2正则化项来解决多重共线性问题,从而提高模型的泛化能力和鲁棒性‌。

基本概念和原理

岭回归通过在最小二乘损失函数中加入L2范数的惩罚项,即模型参数的平方和乘以一个称为岭参数的λ值。这个惩罚项确保了模型参数不会变得过大,从而减少过拟合的风险,提高模型的稳定性和泛化能力‌。岭回归的损失函数包括两部分:一部分是残差平方和,另一部分是模型参数平方和乘以λ值。




应用场景

岭回归特别适用于那些特征之间高度相关(即多重共线性问题)的数据集。在这种情况下,普通的线性回归模型可能会变得不稳定,并且模型的系数可能会变得非常大。岭回归通过惩罚模型参数,使其保持较小的值,从而使得模型更加稳健‌。

‌岭回归的优点‌:

‌1.处理多重共线性‌:岭回归能够有效处理特征之间的强相关性,避免参数估计的不稳定。

‌2.减少过拟合‌:通过惩罚大参数,岭回归能够提高模型的泛化能力,减少过拟合的风险。

‌3.计算简单‌:岭回归的实现相对简单,不需要复杂的计算过程。

‌岭回归的‌缺点‌:

‌1.有偏估计‌:岭回归通过牺牲无偏性来获得更稳定的估计,可能会导致模型预测的偏差。

‌2.参数选择‌:选择合适的λ值是一个挑战,不同的λ值会影响模型的性能。

‌岭回归的实际应用案例

在实际应用中,岭回归常用于生物信息学、金融数据分析等领域,特别是在处理具有高度相关特征的数据时表现出色。例如,在基因表达数据分析中,基因之间的相关性可能导致普通线性回归模型不稳定,此时岭回归可以提供更稳定的参数估计‌。






今天我们仍以熟悉的示例数据集为例,演示一下R语言glmnet包分别拟合二分类logistic模型的lasso回归和岭回归的简单示例。








我们先整理一下Rstudio的环境并加载数据

rm(list=ls()) #移除所有变量数据

install.packages("") #安装包

library() #加载包


#1.数据及包准备

#读取Excel数据

library(readxl) #加载包

data <- read_excel("C:/Users/hyy/Desktop/示例数据.xlsx")

data








#2.Lasso回归,加载所需的包

library(glmnet)

library(Matrix)


#设置自变量与因变量

lambdas <- seq(0,5, length.out = 1000)

X <- as.matrix(data[,3:9]) #指标1至7

Y <- as.matrix(data[,2]) #结局






set.seed(12345)

lassofit <- glmnet(X, Y, family = "binomial",alpha = 1)

plot(lassofit,label = T)

plot(lassofit, xvar = "lambda", label = TRUE)

plot(lassofit, xvar = "dev", label = TRUE)

print(lassofit) 














#交叉验证

set.seed(12345)

lasso_model <- cv.glmnet(X,Y,alpha = 1,lambda = lambdas,nfolds =3)

plot(lasso_model)

plot(lasso_model$glmnet.fit, "lambda", label = T)










#查看具体筛选的变量系数值和Lambda值(lambda.min处)

coef<-coef(lasso_model,s="lambda.min")

coef

#查出lambda.min处的Lambda值

Lambda<-lasso_model$lambda.min

Lambda

#lambda.min处保留的变量的个数,也就是系数不为0

bl.index<-which(coef!=0)

bl.index

#lambda.min处保留的各变量的系数

bl.coef<-coef[bl.index]

bl.coef

#列出lambda.min处保留的各变量的变量名

rownames(coef)[bl.index]








#岭回归

set.seed(12345)

ridgefit <- glmnet(X, Y, family = "binomial",alpha = 0)

plot(ridgefit,label = T)

plot(ridgefit, xvar = "lambda", label = TRUE)

plot(ridgefit, xvar = "dev", label = TRUE)

print(ridgefit) 














#交叉验证

set.seed(12345)

ridge_model <- cv.glmnet(X,Y,alpha = 0,lambda = lambdas,nfolds =3)

plot(ridge_model)

plot(ridge_model$glmnet.fit, "lambda", label = T)










#查看具体筛选的变量系数值和Lambda值(lambda.min处)

coefridge<-coef(ridge_model,s="lambda.min")

coefridge

#查出lambda.min处的Lambda值

Lambdaridge<-ridge_model$lambda.min

Lambdaridge

#lambda.min处保留的变量的个数,也就是系数不为0

ridge.index<-which(coefridge!=0)

ridge.index

#lambda.min处保留的各变量的系数

ridge.coef<-coef[ridge.index]

ridge.coef

#列出lambda.min处保留的各变量的变量名

rownames(coef)[ridge.index]








‌Lasso回归和岭回归(Ridge Regression)的主要区别在于正则化项的形式和应用场景。‌

一、正则化项的区别

‌Lasso回归‌采用L1正则化,即在损失函数中加入权重的绝对值之和作为惩罚项。其损失函数可以表示为:

[

J(\theta) = \frac{1}{2n} \sum_{i=1}^{n} (y_i - x_i^T \theta)^2 + \alpha |\theta|

]

其中,∥θ∥1是θ的L1范数,即θ中各元素的绝对值之和。L1正则化会导致一些权重严格为0,从而实现特征选择‌。

‌岭回归‌采用L2正则化,即在损失函数中加入权重的平方和作为惩罚项。其损失函数可以表示为:

[

J(\theta) = \frac{1}{2n} \sum_{i=1}^{n} (y_i - x_i^T \theta)^2 + \alpha |\theta|^2

]

其中,∥θ∥2是θ的L2范数,即θ中各元素的平方和。L2正则化会使所有权重趋近于0,但不会严格为0,这有助于处理多重共线性问题‌。

二、应用场景的区别

‌Lasso回归‌通过将一些权重压缩为0来实现特征选择,适合于特征之间有关联的情况,能够有效剔除无关特征,适用于特征选择和变量压缩‌。






医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!




医学统计数据分析
分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
 最新文章