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.
Respuestas
¿Demasiados anuncios?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).
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