2016-06-20 7 views
1

릿지 회귀는 OLS 회귀와 매우 약간 다릅니다. 수학적으로, OLS 회귀 수식을 사용 능선 회귀 내가 다중 공선 성을 방지하기 위해 능선 회귀를 사용하고 싶었지만 다시 실질적으로했다 매우 이상한 결과를 얻었다Matlab의 릿지 회귀 및 OLS 회귀

enter image description here

공식을 사용

enter image description here

regress()를 사용하는 것보다 더 나쁩니다. matlab에서 함수 ridge를 호출하기 위해서는 k에 X, Y 및 값을 입력해야합니다. 이론적으로 k가 0으로 설정되면이 방정식은 동일해야합니다. 그러나 두 코드가 동일한 코드 값을 사용하여 코드에서 다시 호출 될 때 B에 대해 두 개의 매우 다른 행렬을받습니다 (아래 참조). 왜 이런 일이 일어날 지 설명 할 수 있습니까?

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

giv 할 수 있습니까? 우리에게'Y_current'와'X'의 아이디어가 있습니까? – edwinksl

답변

4

ridge 문서를 주문에 따라 : 그 의미 0 1. 여기

표준 편차를 가질 수 있도록

결과가 x 열 센터링과 스케일링 후에 계산은 칼럼을 사용하는 예이다 벡터 :

>> 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

답변 해 주셔서 감사합니다! 나는 주위를 샅샅이 조사하고 있었고, X 축에 배율 인수를 넣고 배율 인수를 0으로 설정하여 회귀 분석과 동일한 결과를 얻을 수있었습니다. 다시 한번 감사드립니다! b_regress = 회귀 (Y_current, X); b_ridge = ridge (Y_current, X (:, 2 : 5), 0, 0); – Schmax