8 votos

Confundido por MATLAB la implementación de ridge

Tengo dos implementaciones diferentes de la ridge en MATLAB. Uno de ellos es simplemente

  1. $\mathbf x = (\mathbf{A}'\mathbf{A}+\mathbf{I}\lambda)^{-1}\mathbf{A}'\mathbf b$

    (como se ve en la Wikipedia de la regresión ridge página), con $\mathbf{I}$ la matriz identidad de tamaño de las columnas($\mathbf{A}$) $\times$ columnas($\mathbf{A}$), y

  2. Simplemente estoy llamando de Matlab "ridge" con

    x = ridge(A, b, lambda)
    

Mi problema es que ambos devolver resultados diferentes. (1) devuelve los resultados que yo quiero (sé que esto mediante la comparación de los resultados con otras personas) pero, ¿por qué no (2) no se devuelven los mismos resultados?

Mi matriz $\mathbf A$ es escasa, se llena con 1% 1 y el 99% 0. Algunas de las columnas contienen casi ningún 1. La mayor diferencia parece ser que el coeficiente de las columnas con muy pocos 1 son muy cercanas a 0 en (1), pero puede ser muy lejos de 0 en (2)

¿Alguien tiene alguna idea de por qué es diferente y cómo puedo modificar la llamada en (2) para dar los mismos resultados (1)?

6voto

user2874944 Puntos 41

Este es un programa de matlab para validar lo que el cardenal dijo, es en realidad debido a la centralización y la escala

% Create A(10 by 3 matrix) and b(10 by 1 matrix)
A=rand(10,3);
b=rand(10,1);
lambda=0.01
% centering and scaling A 
s=std(A,0,1);
s=repmat(s,10,1);
A=(A-repmat(mean(A),10,1))./s;

%check the result
X1=inv(A'*A+eye(3)*lambda)*A'*b;
X2=ridge(b,A,lambda,1);

x1 entonces igual x2

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