R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择分类心肌梗塞数据模型案例(下)

简介: R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择分类心肌梗塞数据模型案例

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择分类心肌梗塞数据模型案例(上):https://developer.aliyun.com/article/1493440


应用


让我们尝试第二组数据

我们可以尝试各种λ的值

glmnet(cbind(df0$x1,df0$x2), df0$y==1, alpha=0)
plot(reg,xvar="lambda",col=c("blue","red"),lwd=2)
abline(v=log(.2))



或者

abline(v=log(1.2))
plot_lambda(1.2)


下一步是改变惩罚的标准,使用l1标准范数。


协变量的标准化


如前所述,第一步是考虑所有协变量x_jxj的线性变换,使变量标准化(带有单位方差)

for(j in 1:7) X[,j] = (X[,j]-mean(X[,j]))/sd(X[,j])
X = as.matrix(X)


岭回归


关于lasso套索回归的启发式方法如下图所示。在背景中,我们可以可视化logistic回归的(二维)对数似然,蓝色正方形是我们的约束条件,如果我们将优化问题作为一个约束优化问题重新考虑,

LogLik = function(bbeta){
sum(-y*log(1 + exp(-(b0+X%*%beta))) - 
(1-y)*log(1 + exp(b0+X%*%beta)))}
contour(u,u,v,add=TRUE)
polygon(c(-1,0,1,0),c(0,1,0,-1),border="blue")


这里的好处是它可以用作变量选择工具。

启发性地,数学解释如下。考虑一个简单的回归方程y_i=xiβ+ε,具有  l1-惩罚和 l2-损失函数。优化问题变成

一阶条件可以写成

则解为

优化过程


让我们从标准(R)优化例程开始,比如BFGS

logistic_opt = optim(par = beta_init*0, function(x) PennegLogLik(x,lambda), 
hessian=TRUE, method = "BFGS", control=list(abstol=1e-9))
plot(v_lambda,est_lasso[1,],col=colrs[1],type="l")
for(i in 2:7) lines(v_lambda,est_lasso[i,],col=colrs[i],lwd=2)


结果是不稳定的。


使用glmnet


为了进行比较,使用专用于lasso的R程序,我们得到以下内容

plot(glm_lasso,xvar="lambda",col=colrs,lwd=2)


如果我们仔细观察输出中的内容,就可以看到存在变量选择,就某种意义而言,βj,λ= 0,意味着“真的为零”。

,lambda=exp(-4))$beta
7x1 sparse Matrix of class "dgCMatrix"
s0
FRCAR . 
INCAR 0.11005070
INSYS 0.03231929
PRDIA . 
PAPUL . 
PVENT -0.03138089
REPUL -0.20962611


没有优化例程,我们不能期望有空值

opt_lasso(.2)
FRCAR INCAR INSYS PRDIA
0.4810999782 0.0002813658 1.9117847987 -0.3873926427
PAPUL PVENT REPUL 
-0.0863050787 -0.4144139379 -1.3849264055


正交协变量


在学习数学之前,请注意,当协变量是正交的时,有一些非常清楚的“变量”选择过程,

pca = princomp(X)
pca_X = get_pca_ind(pca)$coord
plot(glm_lasso,xvar="lambda",col=colrs)
plot(glm_lasso,col=colrs)


-

标准lasso


如果我们回到原来的lasso方法,目标是解决

注意,截距不受惩罚。一阶条件是

也就是

我们可以检查bf0是否至少包含次微分。

对于左边的项

这样前面的方程就可以写出来了

然后我们将它们简化为一组规则来检查我们的解

我们可以将βj分解为正负部分之和,方法是将βj替换为βj+-βj-,其中βj+,βj-≥0。lasso问题就变成了

令αj+,αj−分别表示βj+,βj−的拉格朗日乘数。

为了满足平稳性条件,我们取拉格朗日关于βj+的梯度,并将其设置为零获得

我们对βj−进行相同操作以获得

为了方便起见,引入了软阈值函数

注意优化问题

也可以写

观察到

这是一个坐标更新。

现在,如果我们考虑一个(稍微)更一般的问题,在第一部分中有权重

坐标更新变为

回到我们最初的问题。


lasso套索逻辑回归


这里可以将逻辑问题表述为二次规划问题。回想一下对数似然在这里

这是参数的凹函数。因此,可以使用对数似然的二次近似-使用泰勒展开,

其中z_izi是

pi是预测

这样,我们得到了一个惩罚的最小二乘问题。我们可以用之前的方法

beta0 = sum(y-X%*%beta)/(length(y))
beta0list[j+1] = beta0
betalist[[j+1]] = beta
obj[j] = (1/2)*(1/length(y))*norm(omega*(z - X%*%beta - 
beta0*rep(1,length(y))),'F')^2 + lambda*sum(abs(beta))
if (norm(rbind(beta0list[j],betalist[[j]]) - 
rbind(beta0,beta),'F') < tol) { break } 
} 
return(list(obj=obj[1:j],beta=beta,intercept=beta0)) }


它看起来像是调用glmnet时得到的结果,对于一些足够大的λ,我们确实有空成分。


在第二个数据集上的应用

现在考虑具有两个协变量的第二个数据集。获取lasso估计的代码是

plot_l = function(lambda){
m = apply(df0,2,mean)
s = apply(df0,2,sd)
for(j in 1:2) df0[,j] &
reg = glmnet(cbind(df0$x1,df0$x2), df0$y==1, alpha=1,lambda=lambda)
u = seq(0,1,length=101)
p = function(x,y){
predict(reg,newx=cbind(x1=xt,x2=yt),type="response")}
image(u,u,v,col=clr10,breaks=(0:10)/10)
points(df$x1,df$x2,pch=c(1,19)[1+z],cex=1.5)
contour(u,u,v,levels = .5,add=TRUE)


考虑 lambda的一些小值,我们就只有某种程度的参数缩小

plot(reg,xvar="lambda",col=c("blue","red"),lwd=2)
abline(v=exp(-2.8))
plot_l(exp(-2.8))


但是使用较大的λ,则存在变量选择:β1,λ= 0

相关文章
|
1月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
1月前
【R语言实战】——Logistic回归模型
【R语言实战】——Logistic回归模型
|
1月前
|
机器学习/深度学习 数据可视化 算法
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为1
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
1月前
|
机器学习/深度学习 数据可视化
R语言lasso协变量改进Logistic逻辑回归对特发性黄斑前膜因素交叉验证可视化分析
R语言lasso协变量改进Logistic逻辑回归对特发性黄斑前膜因素交叉验证可视化分析
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
|
1月前
R语言偏最小二乘回归PLS回归分析制药产品化学制造过程数据、缺失值填充、变量重要性
R语言偏最小二乘回归PLS回归分析制药产品化学制造过程数据、缺失值填充、变量重要性
|
1月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
1月前
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
|
1月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)

热门文章

最新文章