Ich habe zwei verschiedene Implementierungen von ridge
in MATLAB. Eins ist einfach
(wie auf der Grat-Regressionsseite von Wikipedia zu sehen ), wobei die Identitätsmatrix der Größenspalten ( ) Spalten ( ) ist undA × A.
Ich nenne Matlab einfach "Grat" mit
x = ridge(A, b, lambda)
Mein Problem ist, dass beide unterschiedliche Ergebnisse liefern. (1) gibt die gewünschten Ergebnisse zurück (ich weiß das, indem ich die Ergebnisse mit anderen Personen vergleiche), aber warum gibt (2) nicht dieselben Ergebnisse zurück?
Meine Matrix ist spärlich, sie ist mit 1% 1 und 99% 0 gefüllt. Einige Spalten enthalten fast keine Einsen. Der größte Unterschied scheint zu sein, dass der Koeffizient für Spalten mit sehr wenigen Einsen sehr nahe bei 0 in (1) liegt, aber ziemlich weit von 0 in (2) entfernt sein kann.
Hat jemand eine Idee, warum es anders ist und wie ich den Aufruf in (2) ändern kann, um die gleichen Ergebnisse wie in (1) zu erzielen?
quelle
ridge
(gemäß MATLAB-Dokumentation) Folgendes anzeigt (standardmäßig): Standardmäßig wird b berechnet, nachdem die Prädiktoren zentriert und skaliert wurden, um einen Mittelwert zu erhalten 0 und Standardabweichung 1. Das Modell enthält keinen konstanten Term, und X sollte keine Spalte von 1s enthalten. .ridge
Antworten:
Dies ist ein Matlab-Programm, um zu überprüfen, was der Kardinal gesagt hat. Es liegt tatsächlich an der Zentrierung und Skalierung
x1 ist dann gleich x2
quelle
Sie sollten die Skala in Grat als 0 spezialisieren, damit sie wie x = Grat (A, b, Lambda, 0) aussieht. In diesem Fall ist die erste Reihe von x konstant und der Rest sind die Koeffizienten. Mit anderen Worten, x (2: end, :) sollte das gleiche Ergebnis sein, das Sie mit (1) erhalten haben. Dies ist in der Mathlab-Dokumentation klar angegeben. Ich hoffe, das hilft.
quelle