glmnetãããå°ãçè§£ãããâ¤
ããã§ã¯ååã®è¨äºã«ç¶ãã¦elnet1ã®ç´¹ä»ã§ããååã®è¨äºã¯ãã¡ãã§ãã
- ã«ã¼ãâ¢ï¼åå¸°ä¿æ°ã®æ¨å®ï¼
- ã«ã¼ãâ¥ï¼åå¸°ä¿æ°ã®æ¨å®ã»åï¼
- ã«ã¼ãâ§ï¼åå¸°ä¿æ°ã®æ´æ°ã»åã ï¼
- ã«ã¼ãâ¨ï¼åå¸°ä¿æ°ãæ¨å®ããã夿°ã®ã«ã¦ã³ãï¼
- çµããã«
ã«ã¼ãâ¢ï¼åå¸°ä¿æ°ã®æ¨å®ï¼
以ä¸ã¾ã§ã§è¦ã¦ããéããã«ã¼ãâ ã»â¡ã§ã¯ almããªãã¡lambdaãæ´æ°ãã¤ã¤ãalphaï¼alfï¼ãpenalty.factorï¼vpï¼ã¨ã®ä¹ç®ã«ãã£ã¦ç½°åãè¨ç®ãã¦ãã¾ããã
ã«ã¼ãâ¢ã§ã¯ãã®ç½°åãç¨ãã¦åå¸°ä¿æ°ãæ´æ°ãã¾ãã
ãªã®ã§ãã®ã«ã¼ããglmnetã«ããã¦ã¡ã¤ã³ã¨ãªãå¦çã¨è¨ã£ã¦è¯ãã¨æãã¾ãã
ã«ã¼ãâ¢ã¯niã«å¯¾ããã«ã¼ãã§ããããã§niã¯èª¬æå¤æ°ã®æ°ã§ãããk ãã¤ã³ããã¯ã¹ã¨ãã¦å説æå¤æ°ãããã£ã¦ããã¾ãã
ã¾ãjuã§ãããããã¯å説æå¤æ°åã«ãããæ°å¤ã®ãã©ã¤ãã®æç¡ã示ã 1/0 ã®ãã¯ãã«ã§ããããã©ã¤ãããªããããªãã¡å
¨ã¦ã®æ°å¤ãåãã§ããã°ï¼ju(k) == 0 ï¼ã«ã¼ãâ¢ãã¹ããããã¾ãï¼gotoã®åããå
ã10371ã§ãã«ã¼ãã®ç¯å²ãåãã10371ã¨ãªã£ã¦ãã¾ãï¼ã
do 10371 k=1,ni if(ju(k).eq.0) goto 10371
次ã«aãã k çªç®ã®å¤æ°ã®å¤ãakã«æ ¼ç´ãã¾ããååè¨äºã§è¿½ããããéãããã®aï¼ã¾ãã¯aoï¼ãæçµçã«ã¯åå¸°ä¿æ°ã¨ãã¦è¿ãã¾ãã
åå¦çã«ããã¦a = 0.0ã§åæåããã¦ããã®ã§ã«ã¼ãã® 1 å¨ç®æç¹ã§ã¯akã 0 ã§ãããã«ã¼ãâ ã® 2 å¨ç®ä»¥éã¯ç¸®å°ãããåå¸°ä¿æ°ãå
¥ã£ã¦ãã¾ãã
ak=a(k) ! k çªç®ã®å¤æ°ã® a ã®å¤ã ak ã«ä»£å ¥ã
ç¶ãã¦uã¨vãè¨ç®ãã¾ãããããã¯ååã®è¨äºã§å°ãç´¹ä»ããéããæ¬¡ã®ãããã¯ã§åå¸°ä¿æ°aãæ´æ°ããããã®ãã®ã§ãã
uã¯g(k)ã«ak*xv(k)ãå ç®ãã¦è¨ç®ãã¾ããããã§g(k)ã¯standerdã«ããã¦g(j)=dot_product(y,x(:,j))ãã¤ã¾ãyã¨xã®å
ç©ã¨ãã¦å®ç¾©ããããã®ã§ããï¼yã¨xã¯ããããæ¨æºåããã¦ãã¾ãï¼ããããç½°åãä»ãã¦ããªããã°ãã®å
±åæ£ã OLS ã«ããåå¸°ä¿æ°ã¨ãªãã¯ãã§ãï¼æ¨æºåããã¦ããã®ã§xã®æ¨æºå差㯠1ï¼ã
ãã®gã«xvã§éã¿ãã¤ããakãå ç®ãã¾ããããã§xv㯠weight ãä¹ããxã®äºä¹åã§ãããããã«ã¼ãã® 1 å¨ç®ã§ã¯ak=0ã§ããããgããã®ã¾ã¾å©ç¨ããããã¨ã«ãªãã¾ãã
ãã®ããã«ãã¦å®ç¾©ãããuã®çµ¶å¯¾å¤ããç½°åãæ¸ãããã®ãvã¨ãªãã¾ãã
u=g(k)+ak*xv(k) v=abs(u)-vp(k)*ab
ããã¦ããã«vã 0 ããã大ããå ´åï¼OLS ã«ããåå¸°ä¿æ°ãç½°åããã大ããå ´åï¼ã
- ã
cl(2,k)ãã¨ãsign(v,u)/(xv(k)+vp(k)*dem)ããæ¯è¼ãã¦å°ããæ¹ãé¸ã¶ - ãããã
cl(1,k)ãã¨æ¯è¼ãã¦å¤§ããæ¹ãé¸ã¶
ã¨ããå¦çãè¡ããæ°ãã«aã¨ãã¦æ ¼ç´ãã¾ãã
ããã§clã¯glmnet.rã§cl = rbind(lower.limits, upper.limits) ã¨ãã¦å®ç¾©ããããã®ãªã®ã§ãæ¨å®ãããå¤ãä¸éã¨ä¸éã®éã«æãããã¨ãã¦ãããã¨ããããã¾ããã¾ãvã 0 以ä¸ã®å ´å㯠0 ã¨ãªãã¾ãã
! a(k) ãæ´æ° a(k)=0.0 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*dem)))
以ä¸ãåå¸°ä¿æ°ã®æ´æ°ãè¡ãå¦çã«ãªãã¾ãã ããã¢ããµãªãã¦ãã¾ãããããã®å¦ç㯠glmnet ãçè§£ããä¸ã§æ¥µãã¦éè¦ãªã®ã§ããå°ã説æãã¾ãã
ã¾ãåæã¨ãã¦ãï¼Elastic Net ã§ã¯ãªãï¼Lasso ã§ã¯è»é¾å¤ä½ç¨ç´ ã¨å¼ã°ããååãç¨ãã¦è§£ãæ¨å®ãã¦ãã¾ãã
ããã§è»é¾å¤ä½ç¨ç´ ã¨ã¯ã宿° ããã³
ã«ããã¦
ã®çµ¶å¯¾å¤ã
ããã大ãããã°
ããããã§ãªããã° 0 ãè¿ãä½ç¨ç´ ã§ãï¼
ããªãã¡ãæ¨å®ãããåå¸°ä¿æ°ï¼ã®çµ¶å¯¾å¤ï¼ãç½°åãããå°ãããã° 0 ã«ä¸¸ãã¦ãã¾ãã大ããã¦ãç½°åã®åã ãä¿æ°ã縮å°ãã¦ãã¾ããã¨ãããã¨ã§ãã ä¸è¬ã« Lasso ã¯å¹æã®å°ããªå¤æ°ã®åå¸°ä¿æ°ã 0 ã«ç¸®å°ããæ¹æ³ã¨ãã¦ç¥ããã¦ãã¾ãããå®è£ ã¨ãã¦ã¯ãã®ãããªè»é¾å¤ä½ç¨ç´ ãç¨ãããã¦ããããããè¦ãã¨ãLasso ã¯ã¹ãã¼ã¹ãªè§£ãæ¨å®ã§ãããã¨ããè¨èã®æå³ããããã®ã§ã¯ãªãã§ãããããæ¨å®ããã 0 ã«ãªãããã§ã¯ãªããæç¤ºçã« 0 ã«ãã¦ããã®ã ã¨ã
ããã§å°ãä½è«ãªã®ã§ãããLasso ã Ridge ã«é¢ããåèæ¸ãªã©ãèªãã§ããã¨ãå¹¾ä½å¦çãªèª¬æãã¨ãã¦ä»¥ä¸ã®ãããªã°ã©ããæããããã¨ãããããã¨æãã¾ãï¼

ãã®ã°ã©ããè¦ããã³ã«ç§ã¯ç´å¾ãããªãæ°åã«ãªã£ã¦ãã¾ãããã¨è¨ãã®ããLasso ã®æ¹ï¼ã°ã©ãå·¦å´ï¼ã«çç®ããã¨ãOLS ã«ããæ¨å®å¤ã®åº§æ¨ï¼ã°ã©ãä¸ã®Ãå°ã®ä½ç½®ï¼ãæ¥åã®åºããæ¹ã«ãã£ã¦ã¯è±å½¢ã®é ç¹ã§ã¯ãªãè¾ºã«æ¥ãããã¨ãæ®éã«ããå¾ããã ããã§ãã å°ãªãã¨ããã®ã°ã©ãããã£ã¦ãLasso ã¯è±å½¢ã®é ç¹ã«æ¥ããããï¼ããã«è§£ã 0 ã¨æ¨å®ãããããï¼ãã¨ããã®ã¯å ¨ãèªæã§ã¯ãªããç´æçã§ããªããªãã¨æã£ã¦ãã¾ããã
ãããªæã«ãæ©æ¢°å¦ç¿ã®æ°ç100åã·ãªã¼ãºãã®ãã¹ãã¼ã¹æ¨å®100å with Rããèªãã§ããã¨ãã¾ããä¸è¨ã®ãããªã°ã©ããåºã¦ããã®ã§æ¶ã ã¨ããã®ã§ãããæ¬¡ã®ãã¼ã¸ã«ã¯ä»¥ä¸ã®ãããªã°ã©ããããã¾ããï¼

ã¾ãã«ããã§ãããã®ã°ã©ãã«ããã¦ç½è²ã®é¨åã« OLS ã®æ¨å®å¤ãããå ´åãé ç¹ã§ã¯ãªãè¾ºã«æ¥ãããã¨ã«ãªãã¾ããããããå°ãããã¦ç·è²ã®é¨åã« OLS ã®æ¨å®å¤ãåå¨ããå ´åã«ã¯è±å½¢ã®é ç¹ã«æ¥ãããã¨ã¨ãªããã¤ã¾ãããããéè¦ã§ãªãæ¹ã®è§£ã 0 ã¨ãã¦æ¨å®ãããããã«ãªãã¾ãã
ä¸ã®ã°ã©ãã®ãããªãå¹¾ä½å¦çãªèª¬æãã¯æ¬å½ã«å¤ãã®æ¬ã»è¨äºã§è¦ãããã®ã§ãããä¸ã®ã°ã©ããåããã¦èª¬æãããã¨ã§ããçè§£ãæ·±ã¾ãã®ã§ã¯ãã¨æãã¾ããã ä½è«ãããã
ãã¦ãä¸è¨ã®ãããã¯ã§ã¯ãåå¸°ä¿æ°ãç½°åããã大ããããã¤ä¸éã»ä¸éã®ç¯å²å
ã§ããã°sign(v,u)/(xv(k)+vp(k)*dem)ãæ°ããªaã¨ããã®ã§ããã
ããã»ã©ã®è»é¾å¤ä½ç¨ç´ ã®èª¬æã«ããã¦ã¯ãç½°åãæ¸ããåå¸°ä¿æ°ãï¼ã¤ã¾ãvï¼ãLassoæ¨å®å¤ã¨ãã¦ãã¾ããããããã§ã¯ãããxv(k)+vp(k)*demã§é¤ãã¦ãã¾ãã
ããã¯ãããã§å¾ããã¨ãã¦ããæ¨å®å¤ã¨ããã®ã Lasso ã§ã¯ãªã Elastic Net ã§ããããã§ãããï¼ç¬¬ä¸åã§ç´¹ä»ããï¼æç§æ¸ï¼P36ï¼ã§ã¯ Elastic Net ã®æ¨å®éã
ã¨ãã¦ãã¾ããdemã¯alm*(1-bta)ã§å®ç¾©ããã¦ãããã¨ãæãåºãã¨ããã㯠Ridge ï¼L2ï¼ã«å¯¾ããç½°åã§ãããä¸è¨ã®å¼ã§ã¯ $\lambda_{2}$ ã«è©²å½ãã¾ãã
ã¾ãxv㯠X ã®äºä¹åã忣ã§é¤ã㦠1 ãå ç®ãããã®ã§ããããä½ãæå³ãã¦ããã®ãã¯ä»¥åç´¹ä»ããã¨ããããããªãã£ãã®ã§ããããµã³ãã«ãã¼ã¿ã使ã£ã¦è¨ç®ãã¦ã¿ãã¨ãããã 1 ã«ãªããããªã®ã§ãã£ã¨ããããæ°å¤ãªãã ããã¨æãã¾ãï¼é©å½ï¼ã
æ®ãå¦çã§ãããä¸è¨ã«ãã£ã¦a(k)ãæ´æ°ãããªããã°ã«ã¼ããæãã¦æ¬¡ã®å¤æ°ã«ç§»ãã¾ãï¼gotoã®ç§»åå
10371ã¯ã«ã¼ãâ¢ã®çµç¹ã§ããï¼ã
ã¾ãmmã 0 ã§ãªããã°10391ï¼ã«ã¼ãâ£ã®å
ï¼ã«ç§»åããããã以éã®å¦çããæ¬¡ã«ç´¹ä»ããã«ã¼ãâ£ã¾ã§ãã¹ãããããããã§ãã
ãªããã®mmã¯ã«ã¼ãâ ã®ï¼åç®ã§ã¯ 0 ãªã®ã§ï¼åç®ã¯ç¢ºå®ã«å¦çãè¡ãããããã§ããã
ã¾ãnxã¯éã¼ãã¨ãã夿°ã®æ°ã®ä¸éãªã®ã§ãæ¨å®ãããã©ã¡ã¼ã¿æ°ããããè¶ããã¨ï¼çªç®ã®ã«ã¼ããæããããã§ãã
if(a(k).eq.ak) goto 10371 if(mm(k) .ne. 0) goto 10391 nin=nin+1 if(nin.gt.nx)goto 10372
ã«ã¼ãâ£ï¼åæ£å ±åæ£è¡åã®è¨ç®ï¼
ç¶ãã¦ã«ã¼ãâ£ã§ãã
ããã§ãã«ã¼ãã®å¯¾è±¡ã¯èª¬æå¤æ°ï¼niï¼ã§ãããä»åº¦ã¯ã¤ã³ããã¯ã¹ã¨ãã¦jãç¨ãã忣å
±åæ£è¡åï¼ã®ãããªãã®ï¼ãè¨ç®ãã¦cã«æ ¼ç´ããããã§ãã
ããã§cã¯ni*nxã®ãµã¤ãºã®è¡åã§ãã
ãã®ã«ã¼ãã¯çãã®ã§ã¾ã¨ãã¦è¦ã¦ãã¾ãã¾ãããã
ã¾ãã¯juã§å¤æ°ã«ãã©ããããããã確èªãããªããã°æ¬¡ã®å¤æ°ã«ã¹ããããã¾ãã
ç¶ãã¦mmããã§ãã¯ããmmã 0 ã§ãªããã°cã«mmã代å
¥ãã¦æ¬¡ã®å¤æ°ã«ã¹ããããã¾ãï¼ãªããã®mmã«ã¯å¾ç¶ã®å¦çã§ninã代å
¥ãããã®ã§ããããã®ninã¯mmãåºæºã«æ°å¤ãå ç®ããããããªå¤æ°ã¨ãªã£ã¦ããäºãã«å
¥ãçµãã§ãã¦ä½ããã£ã¦ããã®ããããããã¾ããã§ããï¼ã
ç¶ãã¦jã¨kãæ¯è¼ãã¦åä¸ï¼åã夿°ï¼ã ã£ããcã«xvããåä¸ã§ãªããã°xã®jã¨kã®å
ç©ãcã«ä»£å
¥ãã¾ããxvã¯å
ã»ã©åºã¦ããxã®äºä¹åã§ãã®ã§ããã®cã¯åæ£å
±åæ£è¡åã®ãããªãã®ãè¨ç®ãã¦ããããã§ãï¼æ£æ¹è¡åã§ã¯ãªãã®ã§åæ£å
±åæ£è¡åã¨ã¯è¨ããªãã§ããããã©ãï¼ã
do 10401 j=1,ni ! ãã©ããããªããã°ä»¥éã®å¦çãã¹ããã if(ju(j).eq.0)goto 10401 ! mm ã 0ï¼ãã©ã¡ã¼ã¿ã 0 ã§ãªãï¼ã§ãªããã°æ¬¡ã®ãããã¯ãå®è¡ãã¦æ¬¡ã®å¤æ°ã¸ã¹ããã if(mm(j) .eq. 0)goto 10421 c(j,nin)=c(k,mm(j)) goto 10401 10421 continue if(j .ne. k)goto 10441 ! 夿°ãåä¸ã§ãªããã° 10441 ã«é£ã¶ c(j,nin)=xv(j) ! åä¸ã ã£ãããã goto 10401 10441 continue c(j,nin)=dot_product(x(:,j),x(:,k)) ! åä¸ã§ãªãã£ãã j 㨠k ã®å ç©ãã¨ã 10401 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§
ã«ã¼ãâ£ãçµãã£ãå¾ã¯å°ãã ãå¦çãå
¥ãã¾ãã
mmã«ã¯ninã代å
¥ããã¾ããã¾ãiaã«ã¯kãå
¥ãã¾ããããã®kã¯ã«ã¼ãâ¢ã®ã¤ã³ããã¯ã¹ã§ãã«ã¼ãâ¢ã¯æ´æ°ããªããã°ã«ã¼ãâ£ãã¹ããããã¦ãã¾ãããããã©ã¡ã¼ã¿ã«æ´æ°ããã£ã夿°ã®ã¤ã³ããã¯ã¹ã表ããã¨ã«ãªãã¾ãã
ãã®ä¸ã§ãæ¨å®ãããåå¸°ä¿æ°ã®å·®åãè©ä¾¡ããæ®å·®å¹³æ¹åãæ´æ°ãã¾ãã
ãã®ã¨ãg(k)ã¯ç¸®å°åã®åå¸°ä¿æ°ï¼yã¨x(k)ã®å
ç©ï¼ã§ããããã weightèª¿æ´æ¸ã¿ã® x ã®äºä¹å ãæ¸ãããã®ãæ®å·®å¹³æ¹åããæ¸ãã¦è¨ç®ãã¦ãã¾ãã
continue ! mm ã« nin ãå ¥ãã mm(k)=nin ! ia ã« k ãæ ¼ç´ ia(nin)=k 10391 continue ! a(k) ã®å·®åãã¨ãã a(k)ã ak ã¯æ¨å®ãããåå¸°ä¿æ°ã del=a(k)-ak ! æ®å·®å¹³æ¹åãæ´æ°ãã rsq=rsq+del*(2.0*g(k)-del*xv(k)) dlx=max(xv(k)*del**2,dlx)
ã«ã¼ãâ¤ï¼åå¸°ä¿æ°ã®æ´æ°ï¼
ããã«ç¶ãã¦ã«ã¼ãâ¤ã§ããããã¯ä¸ç¬ã§çµããããã¾è¨ç®ãããdelãç¨ãã¦g(j)ã¤ã¾ã縮å°åã®åå¸°ä¿æ°ãæ´æ°ãã¾ããã¨ããã§kã¯ã«ã¼ãâ¢ã®ã¤ã³ããã¯ã¹ã§ããã®ã«ã¼ãã®ä¸ã§ã¯åºå®ããã¦ãã¾ãã®ã§ãå夿°ã®åå¸°ä¿æ°ã®ç¸®å°ã«å¥ã®å¤æ°ã¨ã®å
±åæ£ãå©ç¨ãã¦ããããã§ããã
å
±åæ£ã大ããã¨ãããã¨ã¯äºãã®å¤æ°éã«ç¸é¢ãããã¨ãããã¨ã§ãããç¸é¢ãæ£ãªãåå¸°ä¿æ°ãå°ãããªãããã«åãããã§ãã
! æ¢ç´¢ç¯å²ã¯ä¸åº¦èª¬æå¤æ° do 10451 j=1,ni ! ã¤ã³ããã¯ã¹ã¯å度 j ã使ã if(ju(j).ne.0) g(j)=g(j)-c(j,mm(k))*del 10451 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§ continue
ã«ã¼ãâ¤ãæããã¨ããã«ã«ã¼ãâ¢ãçµäºã§ãã
10371 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§
ç¶ãã¦ä»¥ä¸ã®ãããã¯ã§çµäºå¦çã®å¤å®ãè¡ãã¾ãã10352ã¾ã§é£ã¶ã¨ãããã¤ãå¦çã¯ãããã®ã®ãã®ã¾ã¾returnã¨ãªãã¾ããã¤ã¾ãdlxãthrãããå°ãããã¾ãã¯ninãnxããã大ããå ´åã«ã¯elnet1ãæãã¾ãã
ããã§ã¯ãªãå ´åãããå°ãå¦çãç¶ãã¾ãã
10372 continue if(dlx.lt.thr)goto 10352 if(nin.gt.nx)goto 10352 if(nlp .le. maxit)goto 10471 jerr=-m return 10471 continue 10360 continue iz=1 da(1:nin)=a(ia(1:nin)) continue 10481 continue nlp=nlp+1 dlx=0.0
ã«ã¼ãâ¥ï¼åå¸°ä¿æ°ã®æ¨å®ã»åï¼
ããã«ç¶ãã¦ã«ã¼ãâ¥ã§ããå®ã¯ãã®ã«ã¼ãã以ä¸ã®éãã«ã¼ãâ¢ã¨å¦çãã»ã¨ãã©åãã§ãã
! ï¼çªç®ã®ã«ã¼ãï¼ä¸é¨çç¥ï¼ do 10371 k=1,ni if(ju(k).eq.0)goto 10371 ak=a(k) u=g(k)+ak*xv(k) v=abs(u)-vp(k)*ab a(k)=0.0 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*dem))) if(a(k).eq.ak)goto 10371 if(mm(k) .ne. 0)goto 10391 nin=nin+1 if(nin.gt.nx)goto 10372 continue mm(k)=nin ia(nin)=k 10391 continue del=a(k)-ak rsq=rsq+del*(2.0*g(k)-del*xv(k)) dlx=max(xv(k)*del**2,dlx) do 10451 j=1,ni if(ju(j).ne.0) g(j)=g(j)-c(j,mm(k))*del ! ï¼çªç®ã®ã«ã¼ã do 10491 l=1,nin k=ia(l) ak=a(k) u=g(k)+ak*xv(k) v=abs(u)-vp(k)*ab a(k)=0.0 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*dem))) if(a(k).eq.ak)goto 10491 del=a(k)-ak rsq=rsq+del*(2.0*g(k)-del*xv(k)) dlx=max(xv(k)*del**2,dlx) do 10501 j=1,nin g(ia(j))=g(ia(j))-c(ia(j),mm(k))*del
ã«ã¼ãã®å¯¾è±¡ãniã§ã¯ãªãninã«ãªã£ã¦ããç¹ãç°ãªãã¾ãããå¦çã¨ãã¦ã¯å¤§ä½åããªã®ã§èª¬æã¯çç¥ãã¾ãã
do 10491 l=1,nin k=ia(l) ! k ãåãåºãï¼ ia ã«ã¯ 0 ã§ã¯ãªããã©ã¡ã¼ã¿ãæ¨å®ããã夿°ã®åãæ ¼ç´ããã¦ãï¼ ak=a(k) ! a ãåãåºã u=g(k)+ak*xv(k) v=abs(u)-vp(k)*ab a(k)=0.0 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*dem))) if(a(k).eq.ak)goto 10491 del=a(k)-ak rsq=rsq+del*(2.0*g(k)-del*xv(k)) dlx=max(xv(k)*del**2,dlx)
ã«ã¼ãâ¦ï¼åå¸°ä¿æ°ã®æ´æ°ã»åï¼
ã«ã¼ãâ¦ãåæ§ã«ã«ã¼ãâ¤ã¨åãå¦çãninã«å¯¾ãã¦è¡ã£ã¦ãã¾ãã
do 10501 j=1,nin g(ia(j))=g(ia(j))-c(ia(j),mm(k))*del 10501 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§
ããã¦ã«ã¼ãâ¥ãçµäºã
continue 10491 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§
ããã§çµäºå¤å®ãè¡ããã¾ãã
nlpã¯ã«ã¼ãã®ã«ã¦ã³ã¿ã¼ã¨ãªã£ã¦ããããã§ãä¸å®åæ°ãéãã¦ããªããã°10481ã¾ã§æ»ããã¾ãã
ãã®10481ã¯ã«ã¼ãâ¥ã®æåã§ãã®ã§ãdlxãååã«å°ãããªããã°å度ã«ã¼ãâ¥ãå®è¡ãããããªæµãã«ãªã£ã¦ããããã§ããã
continue if(dlx.lt.thr)goto 10482 if(nlp .le. maxit)goto 10521 jerr=-m return 10521 continue goto 10481 ! ã«ã¼ãâ¥ã®æåã¾ã§æ»ã 10482 continue da(1:nin)=a(ia(1:nin))-da(1:nin)
ã«ã¼ãâ§ï¼åå¸°ä¿æ°ã®æ´æ°ã»åã ï¼
ã«ã¼ãâ§ã§ããæ¹ãã¦ãninã§ã¯ãªãniã«å¯¾ãã¦åå¸°ä¿æ°ã®æ´æ°ãè¡ããã¾ãã
ããã§daã«ã¯ããä¸ã®ãããã¯ã§aã®å¤ããdaã®å¤ãæ¸ãã¦æ´æ°ãã¦ããã®ã§ãããããå°ãä¸ã®æ¹ã§daã«ã¯aãæ¸¡ãã¦ãã¾ãã
ã¤ã¾ãé çªã¨ãã¦ã¯ãda <- a ã¨ããä¸ã§aãæ´æ°ããæ´æ°å¾ã®aã¨daï¼ã¤ã¾ãæ´æ°åã®aï¼ã®å·®åãæ¹ãã¦daã¨ãããã¨ããæµãã§ãã
ãã®æ´æ°å¾ã®daã¨åæ£å
±åæ£è¡åã®å
ç©ãåå¸°ä¿æ°ããæ¸ããããã§ãã®ã§ããã£ã¦ãããã¨ã¯ã«ã¼ãâ¤ã«ãããåå¸°ä¿æ°ã®æ´æ°ã¨åãã§ããã
do 10531 j=1,ni if(mm(j).ne.0)goto 10531 if(ju(j).ne.0) g(j)=g(j)-dot_product(da(1:nin),c(j,1:nin)) 10531 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§
ã«ã¼ãâ§ãæããã¨å¾ã¯çµäºã¾ã§ä¸ç´ç·ã§ãâ¦ã¨è¨ãããã¨ããã§ãããããã§ãªãã¨è¡æçãªãã¨ã«ã10351ãã¤ã¾ãã«ã¼ãâ¢ã®éå§ã¾ã§æ»ããã¦ãã¾ãã¾ãããªãã¦ãã£ãã
å®ã¯ã«ã¼ãâ¢ã®éå§ç´å¾ã«ã¯iz*jzã§å¦çãå¤ããå¤å®ããããã¨ãã« 1 ã§ããã°ã«ã¼ãâ¢ã®çµäºæç¹ã¾ã§ç§»åããã®ã§ãããããã§jzã 0 ã«ãã¦ãã¾ã£ã¦ããã®ã§æç´ã«ã«ã¼ãâ¢ãå度å®è¡ãããã¨ã«ãªãã¾ãã
ãããjzã 1 ã«æ´æ°ãããæ©ä¼ãããã®ã¯ã«ã¼ãâ¢ãããåã®æ®µéãªã®ã§ãä¸åº¦ãã®å¦çã«å
¥ã£ãå ´åã«ã¯å¿
ãã«ã¼ãâ¢ã®å¦çããåéããªãã¨ãããªããã¨ãããã¨ã§ããã
continue jz=0 goto 10351 ! ãã£ï¼ï¼
ä¸ã®gotoãç¡äºã«åé¿ã§ããå ´åãæå¾ã®å¦çã«å
¥ãã¾ãã
以ä¸ã§ã¯å¿
è¦ãªå¤æ°ãæ ¼ç´ãã¦ãã¾ãã
10352 continue if(nin .le. nx)goto 10551 ! nin ã nx ãè¶ ããå ´åã¯ããã«ãã jerr=-10000-m goto 10282 ! jerr ã æ´æ°ã㦠elnet1 ãæãã 10551 continue if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)) kin(m)=nin ! m åç®ã®ã«ã¼ãã® nin ã kin[m] ã«æ ¼ç´ãã rsqo(m)=rsq ! m åç®ã®ã«ã¼ãã® rsq ã rsqo[m] ã«æ ¼ç´ãã almo(m)=alm ! m åç®ã®ã«ã¼ãã® alm ã almo[m] ã«æ ¼ç´ãã lmu=m if(m.lt.mnl)goto 10281 if(flmin.ge.1.0)goto 10281 me=0
ã«ã¼ãâ¨ï¼åå¸°ä¿æ°ãæ¨å®ããã夿°ã®ã«ã¦ã³ãï¼
以ä¸ã§ã¯elnet1ã®ããã¾ã§ã®ã«ã¼ãã«ãã£ã¦æ¨å®ãããåå¸°ä¿æ°ã確èªãã0.0 ã§ã¯ãªã夿°ã®æ°ãã«ã¦ã³ããã¦ãã¾ããæ¹ãã¦ãjã¯å¤æ°ãmã¯lambdaã®ã¤ã³ããã¯ã¹ã§ãã
! ï¼çªç®ã®ã«ã¼ã do 10561 j=1,nin if(ao(j,m).ne.0.0) me=me+1 10561 continue ! ï¼çªç®ã®ã«ã¼ãããã¾ã§
æå¾ã«meãrsqãrsq0ã®ç¢ºèªãããåé¡ãªããã°æ¬¡ã®lambdaã«ç§»ãã¾ãã
continue if(me.gt.ne)goto 10282 if(rsq-rsq0.lt.sml*rsq)goto 10282 if(rsq.gt.rsqmax)goto 10282 10281 continue ! ï¼çªç®ã®ã«ã¼ãã¯ããã¾ã§ 10282 continue deallocate(a,mm,c,da) return end
çµããã«
以ä¸ã§elnet1ã¯çµäºã§ãã
ããã¾ã§éåã¨ãããã¾ãããããªãã¨ã{glmnet}ã®ã¡ã¤ã³ã®å¦çãæå¾ã¾ã§è¿½ãããããã¨ãåºæ¥ã¾ããï¼éä¸ã§ããããªãé¨åãé£ã°ããããã¾ãããï¼ã
ä»åã®èª¿æ»ã§ã®ä¸çªã®ãã¤ã³ãã¯ãã¯ãããLassoã§ã¯æ¨å®ãããåå¸°ä¿æ°ãç½°åãããå°ãããã° 0 ã«ä¸¸ãã¦ãã¾ããã¨ãããã¨ã確èªã§ãããã¨ã ã¨æãã¾ãã ãLassoã¯ä¸è¦ãªå¤æ°ã0ã¨ãã¦æ¨å®ãããã¨ã§å¤æ°é¸æã§ãããã¨ããã®ã¯ééã£ã¦ã¯ããªãã®ã§ããã0ã¨ãã¦æ¨å®ã§ããã¨ãããããæç¤ºçã«0ã«ãã¦ãã¾ã£ã¦ããã¨ãã表ç¾ã®æ¹ãæ£ããã¨æãã¾ãã ãªã®ã§ã夿°é¸æã§ãããã¨ããè¨èãæ¬æ¥ã§ããã°ã广ã®å°ããªå¤æ°ãç¡è¦ãããã¨ã§å¤æ°é¸æãã¦ãããã¨ããè¨ãæ¹ã«ãªãã®ããªã¨æãã¾ããã
ãããã£ãã¢ãã«ã«ãããéè¦ãªãã¤ã³ãããã½ã¼ã¹ã³ã¼ãã追ããããªããçè§£ããã¨ããã®ã¯æ¬å½ã«å¤§äºãªãã¨ã ã¨æ¹ãã¦æãã¾ãã
ããã§ã¯ã