Tengo dos implementaciones diferentes de ridge
en MATLAB. Uno es simplemente
(como se ve en la página de regresión de cresta de Wikipedia ), con siendo la matriz de identidad de las columnas de tamaño ( \ mathbf {A} ) \ times columnas ( \ mathbf {A} ), y
Simplemente estoy llamando "cresta" de Matlab con
x = ridge(A, b, lambda)
Mi problema es que ambos devuelven resultados diferentes. (1) devuelve los resultados que quiero (lo sé al comparar los resultados con otras personas) pero ¿por qué (2) no devuelve los mismos resultados?
Mi matriz es escasa, está llena con 1% de 1 y 99% de 0. Algunas columnas contienen casi no 1's. La mayor diferencia parece ser que el coeficiente para aquellas columnas con muy pocos 1 están muy cerca de 0 en (1), pero puede estar bastante lejos de 0 en (2)
¿Alguien tiene alguna idea de por qué es diferente y cómo puedo modificar la llamada en (2) para obtener los mismos resultados que (1)?
fuente
ridge
(según la documentación de MATLAB) indica que (como es estándar): por defecto, b se calcula después de centrar y escalar los predictores para que tengan una media 0 y desviación estándar 1. El modelo no incluye un término constante, y X no debe contener una columna de 1s. .ridge
Respuestas:
Este es un programa matlab para validar lo que dijo el cardenal, en realidad se debe al centrado y la escala
x1 entonces igual x2
fuente
Debería especializar la escala en cresta como 0, para que parezca x = cresta (A, b, lambda, 0). En este caso, la primera fila de x es constante y el resto son los coeficientes. En otras palabras, x (2: end, :) debería ser el mismo resultado que obtuviste usando (1). Esto se afirma claramente en la documentación de Mathlab. Esperando que esto ayude.
fuente