راه
۵ کیو· متوسط رو به بالامتوسطPYTHON۴ ثانیه · ۲۵۶ مگابایت

لاسو با کاهش مختصاتی

تابع lasso_cd(X, y, lam, sweeps) لاسو را با کاهش مختصاتی حل می‌کند — همان هدفی که Lasso در scikit-learn کمینه می‌کند:

12n∑i=1n(yi−β0−∑jxijβj)2+λ∑j∣βj∣\frac{1}{2n}\sum_{i=1}^{n}\Big(y_i - \beta_0 - \sum_{j} x_{ij}\beta_j\Big)^2 + \lambda\sum_{j}|\beta_j|

دقیقاً به این ترتیب، تا جواب یکتا باشد:

  1. ستون‌های XX و خود yy را مرکزی کنید (فقط میانگین را کم کنید؛ تقسیم بر انحراف معیار نه). همه‌ی βj\beta_j از صفر شروع می‌شوند.
  2. sweeps بار، برای j=0,1,…,p−1j = 0, 1, \dots, p - 1 به ترتیب: با rr باقی‌مانده‌ی فعلی (y~−X~β\tilde y - \tilde X\beta)،
ρj=x~j⊤(r+x~jβj)βj←S(ρj/n,  λ)x~j⊤x~j/n\rho_j = \tilde x_j^\top (r + \tilde x_j \beta_j) \qquad \beta_j \leftarrow \frac{S(\rho_j / n,\; \lambda)}{\tilde x_j^\top \tilde x_j / n}

که S(z,λ)=sign⁡(z)max⁡(∣z∣−λ,0)S(z, \lambda) = \operatorname{sign}(z)\max(|z| - \lambda, 0) آستانه‌گذاری نرم است. هر βj\beta_j تازه بلافاصله در به‌روزرسانی بعدی به کار می‌رود. 3. عرض از مبدأ: β0=yˉ−∑jxˉjβj\beta_0 = \bar y - \sum_j \bar x_j \beta_j.

خروجی [beta_0, beta_1, ..., beta_p] است.

نمونه‌ها

ورودی نمونه ۱
[[[3.76, 4.94, 4.45], [6.64, 6.44, 5.97], [5.19, 7.75, 5.51], [7.04, 6.75, 6.97], [8.48, 7.95, 9.06], [3.16, 5.02, 2.8], [7.03, 5.52, 6.31], [5.69, 2.41, 4.06], [2.96, 3.26, 3.67], [4.28, 4.2, 3.84], [5.48, 5.31, 6.13], [3.51, 3.96, 4.81]], [12.04, 15.6, 13.44, 17.78, 19.61, 7.31, 15.69, 14.1, 9.06, 10.98, 15.03, 9.62], 0.3, 1]
خروجی نمونه ۱
[2.8295, 1.89, 0.0, 0.1073]
ورودی نمونه ۲
[[[3.76, 4.94, 4.45], [6.64, 6.44, 5.97], [5.19, 7.75, 5.51], [7.04, 6.75, 6.97], [8.48, 7.95, 9.06], [3.16, 5.02, 2.8], [7.03, 5.52, 6.31], [5.69, 2.41, 4.06], [2.96, 3.26, 3.67], [4.28, 4.2, 3.84], [5.48, 5.31, 6.13], [3.51, 3.96, 4.81]], [12.04, 15.6, 13.44, 17.78, 19.61, 7.31, 15.69, 14.1, 9.06, 10.98, 15.03, 9.62], 0.3, 500]
خروجی نمونه ۲
[3.0089, 1.4462, 0.0, 0.5147]

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود