¿Cómo calcular el parámetro de regularización en la regresión de crestas dados los grados de libertad y la matriz de entrada?

11

Sea A una matriz de variables independientes y B sea la matriz de los valores dependientes. En la regresión Ridge, definimos un parámetro de modo que: . Ahora deje que [usv] = svd (A) y entrada diagonal de 's'. definimos grados de libertad (df) = . La regresión de cresta reduce los coeficientes de los componentes de baja varianza y, por lo tanto, el parámetro controla los grados de libertad. Entonces, paran×pn×1λβ=(ATA+λI)1ATBdi=ithi=1n(di)2(di)2+λλλ=0, que es el caso de la regresión normal, df = n, y por lo tanto, se considerarán todas las variables independientes. El problema al que me enfrento es encontrar el valor de dado 'df' y la matriz 's'. Intenté reorganizar la ecuación anterior pero no obtuve una solución de forma cerrada. Proporcione sugerencias útiles.λ

Amit
fuente
Bueno, necesito tiempo para responder esto (probablemente otros serán más rápidos para ayudarlo), pero la mayoría de las ideas se pueden tomar de stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… Y qué es en definición de grados de libertad, ya que echo de menos alguna manera. kλ
Dmitrij Celov
@Dmitrij: Gracias por la respuesta, he actualizado las preguntas y reemplazado 'k' conλ
Amit
Hola Amit, ¿cómo puedes saber cuáles son los grados de libertad antes de calcular el parámetro de regularización?
Baz

Respuestas:

9

Un algoritmo de Newton-Raphson / puntuación de Fisher / serie Taylor sería adecuado para esto.

Tienes la ecuación para resolver con derivada Entonces obtienes: λ

h(λ)=i=1pdi2di2+λdf=0
hλ=i=1pdi2(di2+λ)2
h(λ)h(λ(0))+(λλ(0))hλ|λ=λ(0)=0

reorganizando se obtiene: Esto configura la búsqueda iterativa. Para los valores iniciales iniciales, suponga en la sumatoria, luego obtendrá .λ

λ=λ(0)[hλ|λ=λ(0)]1h(λ(0))
di2=1λ(0)=pdfdf

λ(j+1)=λ(j)+[i=1pdi2(di2+λ(j))2]1[i=1pdi2di2+λ(j)df]

Esto "va" en la dirección correcta (aumenta cuando la suma es demasiado grande, disminuye cuando es demasiado pequeña), y típicamente solo toma unas pocas iteraciones para resolver. Además, la función es monotónica (un aumento / disminución en siempre disminuirá / aumentará la suma), de modo que convergerá de manera única (sin máximos locales).λλ

probabilidadislogica
fuente
muchas gracias, pero tengo una duda de por qué debemos suponer , ya que ya tenemos sus valores correctos ... He comprobado esta fórmula escribiendo un código matlab y no he asumido esa suposición. , pero funciona bien y da la solución correctadi2=1
Amit
La suposición es solo para obtener el valor inicial de "lo suficientemente cerca" del valor correcto. Si tiene una mejor suposición, comience con eso. Incluso podría establecer , siempre que sus d sean mayores que cero. No se supone que las d sean 1 en las iteraciones, solo para iniciar el algoritmo. λ(0)λ(0)=0
probabilidadislogica
(+1) Daría la misma solución numérica de todos modos.
Dmitrij Celov
6

Aquí está el pequeño código de Matlab basado en la fórmula probada por probabilistico:

function [lamda] = calculate_labda(Xnormalised,df)
    [n,p] = size(Xnormalised);   

    %Finding SVD of data
    [u s v]=svd(Xnormalised);
    Di=diag(s);
    Dsq=Di.^2;

    %Newton-rapson method to solve for lamda
    lamdaPrev=(p-df)/df;
    lamdaCur=Inf;%random large value
    diff=lamdaCur-lamdaPrev;   
    threshold=eps(class(XstdArray));    
    while (diff>threshold)          
        numerator=(sum(Dsq ./ (Dsq+lamdaPrev))-df);        
        denominator=sum(Dsq./((Dsq+lamdaPrev).^2));        
        lamdaCur=lamdaPrev+(numerator/denominator);        
        diff=lamdaCur-lamdaPrev;        
        lamdaPrev=lamdaCur;        
    end
    lamda=lamdaCur;
end
Amit
fuente
2
¡Vamos equipo!
probabilidadislogica
Un intento de editor argumenta que la condición while debería ser while ( abs(diff)>threshold ).
gung - Restablece a Monica
Estoy publicando esto como una respuesta alternativa al código publicado por @Amit. Estoy sugiriendo que la comparación con el umbral en el while( abs(diff) > threshold )porque la tolerancia a la diferencia debe ser accesible tanto desde la izquierda como desde la derecha. Por ejemplo, digamos diff = y umbral = entonces la condición del bucle es falsa, pero claramente la solución no ha convergido. 1001e16
heuristicwondering