2016-06-20 12 views
1

Ridge Regression unterscheidet sich von OLS Regression sehr leicht. Mathematisch verwendet OLS Regression der FormelRidge Regression und OLS Regression in Matlab

enter image description here

dem der Ridge-Regression verwendet die Formel

enter image description here

Ich wollte Ridge-Regression verwenden Multikollinearität zu vermeiden, bekam aber wieder sehr seltsame Ergebnisse, die im Wesentlichen waren schlimmer als einfach mit regress(). Um in Matlab den Funktionskamm aufzurufen, muss man ein X, ein Y und einen Wert für k eingeben. Theoretisch sollten diese Gleichungen gleich sein, wenn k auf Null gesetzt ist; Aber wenn beide in meinem Code mit den gleichen Werten von X und Y wieder zurück aufgerufen werden, erhalte ich zwei sehr unterschiedliche Matrizen für B (siehe unten). Kann jemand erklären, warum das passieren würde?

b_ridge = ridge(Y_current,X, 0) 

    12.4525 
    9.0099 
    0.2808 
    -1.5426 
    -1.1107 

b_regress = regress(Y_current,X) 

    3.5586 
    0.8805 
    0.1670 
    -0.3934 
    -0.8526 
+1

Ist es möglich, giv e uns eine Vorstellung von 'Y_current' und' X' sind? – edwinksl

Antwort

4

Acording zu ridge Dokumentation:

Die Ergebnisse werden berechnet nach dem Zentrieren und Skalieren der x Spalten, so dass sie Mittelwert 0 und Standardabweichung haben 1.

Hier ist ein Beispiel Spalte Vektoren:

>> x = randn(5,1); 
>> y = randn(5,1); 
>> ridge(y, x, 0) 
ans = 
    -0.045681220595243 
>> regress(y, x) 
ans = 
    -0.028738686366027 
>> regress(y, (x-mean(x))/std(x)) 
ans = 
    -0.045681220595243 
+1

Danke für die Antwort! Ich stocherte herum und Sie können die gleichen Ergebnisse wie bei der Regression erhalten, indem Sie die Spalte von Einsen entfernen, die in X für einen Skalierungsfaktor eingegeben wurden, und die Skalierungsfaktoreingabe auf 0 setzen. Nochmals vielen Dank! b_regress = Rückschritt (Y_current, X); b_ride = Grat (Y_current, X (:, 2: 5), 0, 0); – Schmax