जीएलएम के लिए वास्तव में यह नुस्खा मुश्किल नहीं है क्योंकि जीएलएम आमतौर पर पुनरावृत्त कम से कम वर्गों का उपयोग करके फिट होते हैं । इसलिए, प्रत्येक पुनरावृत्ति के भीतर, एक रिज दंडित GLM प्राप्त करने के लिए एक रिज दंडित भारित कम से कम वर्ग कदम के साथ नियमित रूप से कम से कम वर्गों के कदम को कम कर सकते हैं। वास्तव में, अनुकूली रिज दंड के साथ संयोजन में यह नुस्खा L0 दंडित GLMs (उर्फ सबसे अच्छा सबसेट, यानी GLMs, जहां गैर-अभिमानी गुणांक की कुल संख्या दंडित की जाती है) को फिट करने के लिए उपयोग किया जाता है। इस उदाहरण के लिए लागू किया गया है 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))))
}
यदि आप अपने फिट किए गए गुणांक पर nonnegativity बाधाओं की जरूरत होती है तो आप बस कर सकते हैं
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
काम नहीं करता]