Afsnit 9.6: Cross-validation i ridge regression

For ridge regression har vi ikke et naturligt skøn over spredningen σ\sigma i den multiple regressionsmodel. Output fra funktionen ridge giver skønnet s(λ)=1ni(xiξ^i(λ))2,s(\lambda)=\sqrt{\frac{1}{n}\sum_i(x_i-\hat\xi_i(\lambda))^2}, hvor der divideres med nn i stedet for et passende (men ukendt) antal frihedsgrader. Skønnet s(λ)s(\lambda) vil aftage med λ,\lambda, og blive lig med nul når λ\lambda er nul. For at få et mere realistisk billede af spredningen vil vi bruge prædiktionsspredningen scv(λ)s_{\text{cv}}(\lambda) fra leave one out cross-validation (LOOCV) som i afsnit 9.3. Denne kan så bruges til at lave et passende valg af regulariseringsparameteren λ.\lambda. Figuren nedenfor viser i det venstre delplot forløbet af s(λ)s(\lambda) som funktion af λ\lambda på en logaritmisk skala. Vi ser her, hvordan s(λ)s(\lambda) langsomt vokser op fra nul, og omkring log(λ)=5\log(\lambda)=5 skifter til en kraftig voksende funktion (gå eventuelt tilbage til foregående afsnit og beregn nogle af s(λ)s(\lambda)-værdierne i figuren). Prædiktionsspredningen scv(λ)s_{\text{cv}}(\lambda) er vist i det højre delplot. Minimum fås med λ\lambda omkring 1 og i området med λ\lambda mellem 0.4 og 10 er scv(λ)s_{\text{cv}}(\lambda) tæt på minimumsværdien. Med λ=10\lambda=10 er prædiktionsfejlen fra krydsvalideringen scv=0.21.s_{\text{cv}}=0.21. Dette er en smule bedre end værdien 0.26 fra forward selektion med tre variable (en 20 procents forbedring). Beregningen af prædiktionsspredningen er vist i det skjulte punkt nedenfor under brug af funktionen cvRidge.
I de to nederste delfigurer vises forskellige aspekter af ridge regression for forskellige værdier af λ\lambda. I nederste venstre delfigur er vist forløbet af tre af koordinaterne i β^(λ)\hat\beta(\lambda). Vi kan se her, hvordan koordinaterne går mod nul, når λ\lambda bliver stor. I nederste højre delfigur er vist forløbet for tre forventede værdier ξ^i(λ)\hat\xi_i(\lambda). For λ\lambda stor nærmer disse værdier sig genemsnittet af alle responsværdierne.
Resultat 9.6.1. (Valg af regulariseringsparameter)
I ridge regression vælges værdien af regulariseringsparameteren λ\lambda ved hjælp af cross-validation. Som udgangspunkt vælges den værdi af λ,\lambda, der giver den mindste værdi af prædiktionsspredningen scv(λ).s_{\text{cv}}(\lambda). Værdien kaldes λmin.\lambda_{\min}.
Eventuelt vælges en værdi lidt større end λmin,\lambda_{\min}, der opfylder, at scv(λ)s_{\text{cv}}(\lambda) ikke er meget større end scv(λmin),s_{\text{cv}}(\lambda_{\min}), og et plot med de observerede mod de forventede ikke viser systematisk afvigelse fra identitetslinjen.

9.6.2 Cross-validation

For at finde prædiktionsspredningen ved LOOCV har jeg lavet en funktion cvRidge. Input til denne er n×dn\times d matricen TT med de forklarende variable, vektoren xx med responsværdierne, og værdien af λ\lambda, der ønskes undersøgt. Output er prædiktionsspredningen scvs_{\text{cv}} defineret som i (9.3.2), og en standard error for scvs_{\text{cv}} baseret på de nn værdier, der indgår i beregningen (stds(scv)\text{std}_s(s_{\text{cv}})). I det følgende kodevindue er koden til cvRidge skrevet ind, og data omkring oktantallet i bensinprøver analyseres. Prøv at køre koden flere gange med en følge af λ\lambda-værdier på formen 0.1, 1, 10, 100 og 1000, og se at de fundne værdier stemmer overens med figuren ovenfor.

Se opstartskoden (til/fra)

I ovenstående eksempel har jeg lagt op til, at et endeligt valg af λ\lambda er λ=10.\lambda=10. Minimum af scv(λ)s_{\text{cv}}(\lambda) fås med valget λmin=0.8\lambda_{\min}=0.8, og minimumsværdien er scv(λmin)=0.2102.s_{\text{cv}}(\lambda_{\min})=0.2102. Dette tal kommer med en usikkerhed (standard error), og denne er vurderet til stds=0.0176\text{std}_s=0.0176 i programmet cvRidge. Der er delvist en tradition for, at man vælger en værdi af λ\lambda lidt over den værdi, der giver minimum. Dette skyldes, at man ønsker at regularisere løsningen β^(λ)\hat\beta(\lambda) mest muligt. Nogle programmer har indbygget, at λ\lambda vælges som den værdi større end λmin,\lambda_{\min}, hvor scv(λ)s_{\text{cv}}(\lambda) er scv(λmin)+stds.s_{\text{cv}}(\lambda_{\min})+\text{std}_s. Jeg lægger ikke op til at bruge denne regel automatisk. I stedet anbefaler jeg, at man vurderer en værdi af λ\lambda lidt over λmin\lambda_{\min} ved at se efter, om der optræder systematiske afvigelser i et plot af de observerede mod de forventede. Ud fra en sådan tilgang vil jeg vælge λ\lambda omkring 10 for bensindata. Med λ=10\lambda=10 er prædiktionsspredningen scv(10)=0.2118,s_{\text{cv}}(10)=0.2118, som cirka er scv(λmin)+12stds.s_{\text{cv}}(\lambda_{\min})+\frac{1}{2}\text{std}_s. Man skal vælge λ\lambda til cirka 60, for at få en prædiktionsspredning der er scv(λmin)+stds.s_{\text{cv}}(\lambda_{\min})+\text{std}_s. For denne værdi synes jeg, at der er tydelige systematiske afvigelser i et plot af de observerede mod de forventede. Prøv selv i koden Ridge regression i python at køre λ=10\lambda=10 og λ=60,\lambda=60, og se på de figurer der dannes med de observerede afsat mod de forventede.
ForegåendeNæste