行増強を使用してリッジがペナルティーを課したGLM?


12

リッジ回帰は、元のデータ行列にデータの行を追加するだけで達成できることを読みました。各行は、従属変数に0 、独立変数にk平方根またはゼロを使用して構築されます。次に、独立変数ごとに1行追加されます。

ロジスティック回帰や他のGLMを含め、すべての場合に証拠を導き出すことが可能かどうか疑問に思っていました。


いいえ、ncss.com / wp-content / themes / ncss / pdf / Procedures / NCSS / ...から入手しました。それは335-4ページで簡単に言及されました
スノーフレーク

1
そこのコメントを削除してすみません。私はあなたの返事を見る前に間違っていると判断し、それを削除しました。
Glen_b -Reinstate Monica

2
stats.stackexchange.com/questions/15991で、この問題のわずかな一般化が求められ、回答されています。この質問のロジスティック回帰の部分を扱っていないため、2つのスレッドをマージすることを決めていません。
whuber

GLMは、bwlewis.github.io/GLMのように、反復的に再重み付けされた最小二乗法を使用して適合します。したがって、各反復内で、通常の重み付け最小二乗法をリッジペナルティ付き最小二乗法で置き換えて、リッジペナルティ付きGLMを取得できます。実際、適応リッジペナルティと組み合わせて、l0araパッケージのように、L0ペナルティ付きGLMに適合させるために使用されます。biodatamining.biomedcentral.com / articles / 10.1186 / およびjournals.plos.org/plosone/article?id=10.1371を
トムウェンセリアーズ

回答:


13

リッジ回帰は、最小化 =1nyバツTβ2+λj=1pβj2

(多くの場合、定数が必要ですが、縮小されません。その場合、と予測子に含まれますが、縮小したくない場合は、擬似観測に対応する行がありません。あなたはそれを縮小したい、あなたそれのための行を持っている。私はそれがpで数えられないようにそれを書いて、それはより複雑なケースであるので、縮まない。 )βp

各 "y"と対応するp + 1 -vectors "x"を次のように書くことができれば、2番目の項を疑似観測 として書くことができます。pp+1

yn+jバツn+jTβ2=λβj2j=1p

yn+j=0バツn+jj=λバツn+jk=0バツn+j0=0通常)とします。

それから

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

This works for linear regression. It doesn't work for logistic regression, because ordinary logistic regression doesn't minimize a sum of squared residuals.

[Ridge regression isn't the only thing that can be done via such pseudo-observation tricks -- they come up in a number of other contexts]


Thanks, I was already struggling with rewriting everything from logistic regression, but I simply couldn't implement the phoney data method. And I don't trust my own abilities sufficiently to be able to say that it is impossible.
Snowflake

At least I don't think it is. I'll take another look at the likelihood function.
Glen_b -Reinstate Monica

3
+1 Additional related regression tricks are introduced in answers at stats.stackexchange.com/a/32753 and stats.stackexchange.com/a/26187, inter alia.
whuber

ただし、bwlewis.github.io / GLMのように、GLMは反復的に再重み付けされた最小二乗法を使用して適合します。したがって、各反復内で、通常の重み付けされた最小二乗法をリッジペナルティ付き加重最小二乗法に置き換えて、リッジペナルティ付きGLMを取得できます。実際、適応リッジペナルティと組み合わせて、l0araパッケージのように、L0ペナルティ付きGLMに適合させるために使用されます。biodatamining.biomedcentral.com / articles / 10.1186 / およびjournals.plos.org/plosone/article?id=10.1371を
トムウェンセリアーズ

@TomWenseleersありがとう、はい、それは完全に理にかなっています
Glen_b -Reinstate Monica

0

Generalizing this recipe to GLMs indeed is not difficult as GLMs are usually fit using iteratively reweighted least squares. Hence, within each iteration one can subsitute the regular weighted least squares step with a ridge penalized weighted least squares step to get a ridge penalized GLM. In fact, in combination with adaptive ridge penalties this recipe is used to fit L0 penalized GLMs (aka best subset, ie GLMs where the total number of nonzero coefficients are penalized). This has been implemented for example in the l0ara package, see this paper and this one for details.

It's also worth noting that the fastest closed-form way of solving a regular ridge regression is using

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動作しません]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.