জিএলএমগুলিতে এই রেসিপিটি সাধারণকরণ করা সত্যিই কঠিন নয় কারণ সাধারণত জিএলএমগুলি পুনরাবৃত্তভাবে স্বল্পতম স্কোয়ারগুলি ব্যবহার করে ফিট হয় । সুতরাং, প্রতিটি পুনরাবৃত্তির মধ্যেই একটি নিয়মিত ওজনযুক্ত ন্যূনতম বর্গক্ষেত্রের ধাপটি একটি রিজকে দন্ডিত ওজনযুক্ত ন্যূনতম বর্গক্ষেত্র পদক্ষেপের সাহায্যে একটি রিজকে শাস্তিযুক্ত জিএলএম পেতে পারেন। প্রকৃতপক্ষে, অভিযোজিত রিজ জরিমানার সংমিশ্রণে এই রেসিপিটি L0 দণ্ডিত জিএলএম ফিট করতে ব্যবহৃত হয় (ওরফে সেরা উপসেট, অর্থাত্ জিএলএম যেখানে মোট ননজারো সহগের দণ্ডিত হয়)। এই উদাহরণস্বরূপ বাস্তবায়িত হয়েছে 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
কাজ করে না]