使用行增强的Ridge惩罚GLM?


12

我已经读过可以通过简单地将数据行添加到原始数据矩阵中来实现岭回归,其中每行使用0表示因变量,而平方根或使用0表示自变量。然后为每个自变量添加额外的一行。k

我想知道是否有可能针对所有情况(包括逻辑回归或其他GLM)得出证明。


不,我是从得到它ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/...并且它简单提到335-4页
雪花

1
抱歉,您在此处删除对您的评论。在看到您的回复之前,我认为自己是错的,并删除了它。
Glen_b-恢复莫妮卡

2
stats.stackexchange.com/questions/15991上提出并回答了这个问题。因为它没有解决这个问题的逻辑回归部分,所以我不赞成合并这两个线程。
ub

GLM使用迭代加权的最小二乘拟合,如bwlewis.github.io/GLM中所示,因此,在每次迭代中,可以用岭惩罚的加权最小二乘步数替换常规加权最小二乘法步骤,以得到岭惩罚的GLM。实际上,与适应性岭惩罚相结合,可用于适应L0惩罚的GLM,如l0ara软件包中所示,请参见biodatamining.biomedcentral.com/articles/10.1186/…journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers

Answers:


13

Ridge回归将 。i=1n(yixiTβ)2+λj=1pβj2

(通常需要一个常数,但不要缩小。在那种情况下,它包含在和预测变量中-但是,如果您不想收缩它,则没有对应的行用于伪观察。或者如果您确实想缩小它,那么您确实有一行。我将它写为好像它没有被计入,也不收缩,因为这是更复杂的情况。另一种情况是对此进行的微不足道的更改)βp

如果我们可以将每个“ y”和每个对应的向量“ x”写成,则可以将第二项写为伪观测 。p(p+1)

(yn+jxn+jTβ)2=λβj2,j=1,,p

但是通过检查,只需让,让然后让所有其他(包括)。yn+j=0xn+j,j=λxn+j,k=0xn+j,0=0

然后

(yn+j[xn+j,0β0+xn+j,1β1+xn+j,2β2+...+xn+j,pβp])2=λβj2

这适用于线性回归。它不适用于逻辑回归,因为普通逻辑回归无法最小化残差平方和。

[脊退并不是通过这种伪观察技巧可以完成的唯一事情-它们在许多其他情况下也可以出现]


谢谢,我已经在努力从逻辑回归中重写所有内容,但是我根本无法实现电话数据方法。而且我不完全相信自己的能力,无法说这是不可能的。
雪花

至少我不这么认为。我再看一看似然函数。
Glen_b-恢复莫妮卡

3
+1的其他相关回归招数是在回答推出stats.stackexchange.com/a/32753stats.stackexchange.com/a/26187除其他外
ub

不过,就像在bwlewis.github.io/GLM中一样,GLM使用迭代加权最小二乘法拟合,因此在每次迭代中,都可以用规则化的加权最小二乘步数替换为岭惩罚的加权最小二乘步数,以得到对岭进行惩罚的GLM。实际上,与适应性岭惩罚相结合,可用于适应L0惩罚的GLM,如l0ara软件包中所示,请参见biodatamining.biomedcentral.com/articles/10.1186/…journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers

@TomWenseleers谢谢,是的,这完全有道理
Glen_b-恢复莫妮卡

0

将这个配方推广到GLM确实并不困难,因为GLM通常使用迭代加权最小二乘法进行拟合。因此,在每次迭代中,可以用岭惩罚的加权最小二乘法代替常规加权最小二乘法步骤,以获得岭惩罚的GLM。实际上,结合自适应岭惩罚,该配方可用于拟合L0惩罚的GLM(又名最佳子集,即对非零系数的总数进行惩罚的GLM)。例如,这已在l0ara包中实现,有关详细信息,请参见本白皮书白皮书

还值得注意的是,解决常规岭回归的最快封闭形式方法是使用

lmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  solve(crossprod(X) + diag(lambdas), crossprod(X, y))[, 1]
}

对于的情况n>=p,或

lmridge_solve_largep = function (X, Y, lambda) (t(X) %*% solve(tcrossprod(X)+lambda*diag(nrow(X)), Y))[,1]

什么时候p>n以及没有拦截的模型。

这比使用行增加配方要快,即

lmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  qr.solve(rbind(X, diag(sqrt(lambdas))), c(y, rep(0, ncol(X))))
}

如果您恰好需要拟合系数的非负约束,则可以

library(nnls)

nnlmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x
}

然后给出的结果比

nnlmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=rbind(X,diag(sqrt(lambdas))), b=c(Y,rep(0,ncol(X))))$x 
}

(严格来说,只有解决方案nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x 才是正确的解决方案)。

我还没有弄清楚如何针对这种p > n情况进一步优化非负约束的情况-让我知道是否有人会知道该怎么做... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$x不起作用]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.