逻辑回归的有效估计

时间:2018-10-29 12:23:53

标签: r optimization logistic-regression linear-programming

为了更好地了解内部工作原理和简单的进行进一步实验的方法,我正在尝试在R上实现(正规化)逻辑回归。

众所周知,实现它的一种方法是解决以下问题:

$$ \ arg \ min _ {\ beta} \ sum(-y_i(x_i'beta)+ log(1 + e ^ {x_i'beta)})+ \ lambda \ | \ beta \ | $$

但是,对于$ x_i'\ beta $的较大值,exp会爆炸,返回一个Inf值。我发现的一种解决方案是使用Rmpfr::mpfr并增加一些精度,即

x <- mpfr(x, precBits = 106)

但是,这增加了相当大的开销性能。另一方面,glmglmnet的基本实现设法相当快地获得解决方案。怎么了避免计算exp(x %*% beta)的可能方法是什么?还是仅通过简化为其他实现方式(例如,在C或Fortran中)来实现?

注意: 我正在尝试使用Rsolnp::solnp增强型拉格朗日优化器来完成此操作,并对参数有一定的限制。对于简单的回归问题,由于可以添加梯度,因此在性能上似乎不错,但是对于逻辑回归而言,可能不会太大吗?

Rsolnp:::solnp(pars = beta0, fun = logistic_optimizer,  
                     eqfun = constraint,
                     ineqfun = positive_constraint,
                     ineqLB = rep(0, length(beta0)),
                     ineqUB =rep(Inf, length(beta0)),
                     LB = rep(0, length(beta0)),
                     UB = rep(Inf, length(beta0))
                     )

很高兴知道是否有更有效的方法来手动解决此问题,而不必减少到已知的库,例如glmglmnet,因为我希望控制logistic_optimizer表达。

1 个答案:

答案 0 :(得分:0)

我建议检出功能optim {stats}。有关LASSO实施,请参见此帖子:

How can I implement lasso in R using optim function

以及对于GLM实施:

Applying Cost Functions in R

此外,optim部分用Mortran(Fortran的扩展名)编写,因此除非您是Fortran向导,否则修改自定义功能的optim函数并不是那么容易。 / p>