Eu tenho duas implementações diferentes ridge
no MATLAB. Um é simplesmente
(como visto na página de regressão de cume da Wikipedia ), com sendo a matriz de identidade das colunas de tamanho ( ) column ( ) e
Estou simplesmente chamando o "cume" de Matlab com
x = ridge(A, b, lambda)
Meu problema é que ambos retornam resultados diferentes. (1) retorna os resultados que eu quero (sei disso comparando resultados com outras pessoas), mas por que (2) não retorna os mesmos resultados?
Minha matriz é esparsa, é preenchida com 1% 1 e 99% 0. Algumas colunas contêm quase nenhum número 1. A maior diferença parece ser que o coeficiente para as colunas com muito poucos 1s está muito próximo de 0 em (1), mas pode estar bem longe de 0 em (2)
Alguém tem alguma idéia de por que é diferente e como posso modificar a chamada em (2) para fornecer os mesmos resultados que (1)?
fonte
ridge
(de acordo com a documentação do MATLAB) indica que (como é padrão): Por padrão, b é calculado após a centralização e escalar os preditores de ter média 0 e desvio padrão 1. O modelo não inclui um termo constante e X não deve conter uma coluna de 1s. .ridge
Respostas:
Este é um programa matlab para validar o que o cardeal disse, na verdade é devido à centralização e escalonamento
x1 então igual x2
fonte
Você deve especializar a escala no cume como 0, para que pareça x = cume (A, b, lambda, 0). Nesse caso, a primeira linha de x é constante e o restante são os coeficientes. Em outras palavras, x (2: end, :) deve ser o mesmo resultado obtido com o uso de (1). Isto está claramente indicado na documentação do mathlab. Esperando que isso ajude.
fonte