11 votos

Cómo calcular el parámetro de regularización en la cresta de regresión dada grados de libertad y la matriz de entrada?

Dejar que Un ser $n \times p$ matriz de variables independientes y B será el correspondiente $n \times 1$ matriz de los valores dependientes. En la cresta de la regresión, se define un parámetro de $\lambda$ así que: $\beta=(A^\mathrm{T}A+\lambda I)^{-1}A^\mathrm{T}B$ . Ahora vamos a [u, s, v]=svd(A) y $d_{i}=i^{th}$ diagonal de la entrada de 's'. podemos definir grados de libertad (df)= $\sum_{i=1}^{n} \frac{(d_{i})^2}{(d_{i})^2+\lambda}$ . Ridge regresión reduce los coeficientes de baja de componentes de varianza y, por tanto, el parámetro de $\lambda$ controles de los grados de libertad.Así, por $\lambda=0$, que es el caso de la normal de regresión, df=n, y por lo tanto todas las variables independientes serán consideradas. El problema que estoy enfrentando es encontrar el valor de $\lambda$ 'df' y la matriz de 's'. He probado a re-organizar la ecuación de arriba, pero no era obtener una solución de forma cerrada. Por favor, proporcione cualquier indicadores útiles.

11voto

patfla Puntos 1

Una de Newton-Raphson/Fisher-puntuación/Taylor-algoritmo de serie adecuado para esto.

Usted tiene la ecuación a resolver para $\lambda$ $$h(\lambda)=\sum_{i=1}^{p}\frac{d_{i}^{2}}{d_{i}^{2}+\lambda}-df=0$$ con derivados $$\frac{\partial h}{\partial \lambda}=-\sum_{i=1}^{p}\frac{d_{i}^{2}}{(d_{i}^{2}+\lambda)^{2}}$$ Usted, a continuación, obtener: $$h(\lambda)\approx h(\lambda^{(0)})+(\lambda-\lambda^{(0)})\frac{\partial h}{\partial \lambda}|_{\lambda=\lambda^{(0)}}=0$$

re-organización para $\lambda$ consigue: $$\lambda=\lambda^{(0)}-\left[\frac{\partial h}{\partial \lambda}|_{\lambda=\lambda^{(0)}}\right]^{-1}h(\lambda^{(0)})$$ Esto establece la iterativo de búsqueda. Para valores iniciales, suponga $d^{2}_{i}=1$ en la suma, entonces usted consigue $\lambda^{(0)}=\frac{p-df}{df}$.

$$\lambda^{(j+1)}=\lambda^{(j)}+\left[\sum_{i=1}^{p}\frac{d_{i}^{2}}{(d_{i}^{2}+\lambda^{(j)})^{2}}\right]^{-1}\left[\sum_{i=1}^{p}\frac{d_{i}^{2}}{d_{i}^{2}+\lambda^{(j)}}-df\right]$$

Este "va" en la dirección correcta (incremento $\lambda$ cuando la suma es demasiado grande, disminuir cuando demasiado pequeño), y por lo general sólo toma un par de iteraciones para resolver. Además de la función es monótona (un aumento/disminución en el $\lambda$ siempre de aumentar/disminuir la suma), para que convergen de forma exclusiva (sin los máximos locales).

6voto

Lab Tech Puntos 26

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

    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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X