J'ai deux implémentations différentes de ridge
MATLAB. L'un est tout simplement
(comme on le voit sur la page de régression de crête de Wikipedia ), avec étant la matrice d'identité des colonnes de taille () Colonnes(), et
J'appelle simplement la "crête" de Matlab avec
x = ridge(A, b, lambda)
Mon problème est que les deux retournent des résultats différents. (1) renvoie les résultats que je veux (je le sais en comparant les résultats avec d'autres personnes) mais pourquoi (2) ne renvoie pas les mêmes résultats?
Ma matrice est rare, il est rempli de 1% 1 et 99% 0. Certaines colonnes ne contiennent presque pas de 1. La plus grande différence semble être que le coefficient pour les colonnes avec très peu de 1 est très proche de 0 dans (1), mais peut être assez loin de 0 dans (2)
Quelqu'un a-t-il une idée de pourquoi c'est différent et comment je peux modifier l'appel dans (2) pour donner les mêmes résultats que (1)?
la source
ridge
(selon la documentation MATLAB) indique que (comme c'est la norme): Par défaut, b est calculé après centrage et mise à l'échelle des prédicteurs pour avoir une moyenne 0 et écart-type 1. Le modèle n'inclut pas de terme constant et X ne doit pas contenir de colonne de 1. .ridge
. Vous ne devriez rien faire pourRéponses:
Ceci est un programme matlab pour valider ce que le cardinal a dit, il est en fait dû au centrage et à la mise à l'échelle
x1 alors égal à x2
la source
Vous devez spécialiser l'échelle de la crête à 0, de sorte qu'elle ressemble à x = crête (A, b, lambda, 0). Dans ce cas, la première ligne de x est constante et les autres sont les coefficients. En d'autres termes, x (2: end, :) devrait être le même résultat que celui obtenu en utilisant (1). Ceci est clairement indiqué dans la documentation de mathlab. En espérant que cela aide.
la source