scikit-learn 的 `LogisticRegression` 的 R 中的等价物是 `penalty="l2"`

机器算法验证 r 物流 scikit-学习
2022-03-16 12:55:37

我如何在 R 中实现相当于

lr = LogisticRegression(penalty='l2')
lr.fit(X, y)

在 R?

1个回答

您的问题是如何在 R 中运行 L2 正则化逻辑回归。

我的另一个详细答案可以在这里找到。逻辑回归的正则化方法

对于实施,有不止一种方法可以做到这一点。

  • 方法一、使用方法glmnet(data,label,family="binomial", alpha=0, lambda=1),详情可参见glmnet手册,查看第9页。

  • 方法 2 使用LiblineaR(data,label, type=0)LiblineaR(data,label, type=7)详细信息可以在LiblineaR 手册第 4 页找到。两者都是 L2 正则化逻辑回归,一个原始的和一个对偶的。

  • 方法3,手动执行。

这是正则化逻辑损失的代码,它是梯度。我们可以使用优化工具箱(如BFGS)进行优化。

rm(list=ls())
set.seed(0)
library(mlbench)

d=mlbench.2dnormals(100,2)
x=d$x
y=ifelse(d$classes==1,1,0)
lambda=1


logistic_loss <- function(w){
  p=plogis(x %*% w)
  L=-y*log(p)-(1-y)*log(1-p)
  LwR2=sum(L)+lambda*t(w) %*% w
  return(c(LwR2))
}

logistic_loss_gr <- function(w){
  p=plogis(x %*% w)
  v=t(x) %*% (p - y)
    return(c(v)+2*lambda*w)
}

optim(runif(2),logistic_loss,logistic_loss_gr,method="BFGS")