능선 회귀는 원래 데이터 행렬에 데이터 행을 추가하여 달성 할 수 있다는 것을 읽었습니다. 여기서 각 행은 종속 변수의 경우 0을 사용하고 독립 변수 의 경우 제곱근 또는 0을 사용하여 구성됩니다. 그런 다음 각 독립 변수마다 하나의 추가 행이 추가됩니다.
로지스틱 회귀 또는 다른 GLM을 포함하여 모든 경우에 대한 증거를 도출 할 수 있는지 궁금합니다.
능선 회귀는 원래 데이터 행렬에 데이터 행을 추가하여 달성 할 수 있다는 것을 읽었습니다. 여기서 각 행은 종속 변수의 경우 0을 사용하고 독립 변수 의 경우 제곱근 또는 0을 사용하여 구성됩니다. 그런 다음 각 독립 변수마다 하나의 추가 행이 추가됩니다.
로지스틱 회귀 또는 다른 GLM을 포함하여 모든 경우에 대한 증거를 도출 할 수 있는지 궁금합니다.
답변:
릿지 회귀는 합니다.
(종종 상수가 필요하지만 축소되지는 않습니다.이 경우 및 예측 변수에 포함 되지만 축소하지 않으려는 경우 의사 관측에 해당하는 행이 없습니다. 또는 당신이 그것을 축소하려는 경우, 당신은 할 그것에 대한 행이 있습니다. 그것이에 포함되지 것처럼 내가 쓸 것이다 , 그리고 수축 된이 더 복잡 사건으로,. 다른 경우이에서 사소한 변화 .)
우리는 두 번째 항 쓸 수 우리가 각각의 "Y"와 대응하는 각각 기록 할 경우 의사 관찰 이 "X"등 -vectors
그러나 검사를 통해 , , 다른 모든 ( ).
그때
입니다.
이것은 선형 회귀에 적용됩니다. 일반 로지스틱 회귀는 잔차 제곱의 합을 최소화하지 않기 때문에 로지스틱 회귀에는 작동하지 않습니다.
[릿지 회귀는 그러한 의사 관측 트릭을 통해 수행 할 수있는 유일한 것이 아닙니다. 여러 가지 다른 상황에서 나타납니다.]
이 레시피를 GLM에 일반화하는 것은 그리 어렵지 않습니다. GLM은 일반적으로 반복적 으로 가중 된 최소 제곱을 사용하여 적합하기 때문 입니다. 따라서, 각각의 반복 내에서 릿지 불이익을 가한 최소 제곱 단계로 규칙적인 가중 최소 제곱 단계를 대체하여 릿지 불이익을받은 GLM을 얻을 수있다. 실제로, 적응 형 릿지 페널티와 함께이 레시피는 L0 페널티 GLM (일명 최상의 서브 세트, 즉 0이 아닌 계수의 총 수가 페널티를받는 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
못했습니다.