在看一个师兄写的R的code,他用glmnet的时候,设置了模型参数lambda.min.ratio=0.001。这个参数是什么意思?
fit_model = cv.glmnet(sparse.model.matrix(eqn, data=X), y, family='binomal', alpha=0, type.measure='auc', lambda.min.ratio=0.001)
1个回答
看你的这句代码,应该是用正则化的逻辑回归来做二元分类,并且用交叉验证来找到最好的lambda。这个lambda是目标函数中惩罚项前面的系数。目标函数是
$$\min_{\beta,\beta_0}\text{log-loss}(\text{y},\text{X}\beta+\beta_0)+\lambda\left((1-\alpha)\frac{\|\beta\|_2^2}{2}+\alpha\|\beta\|_1\right).$$
当lambda=0,就是正常的逻辑回归,没有任何惩罚项。
言归正传,cv.glmnet是利用交叉验证来找到一组备选的lambda中最好的lambda。lambda.min.ratio=0.001的意思就是我们给这组备选的lambda设定了起始值0.001。cv.glmnet会自动从0.001开始试,逐渐增大,直到程序满足一定的条件后终止。
为了防止错过最佳的lambda,lambda.min.ratio通常会设置为很接近0的数(正数)。你师兄写lambda.min.ratio=0.001就是这个目的。
SofaSofa数据科学社区DS面试题库 DS面经