이전에 새터를 자동으로 구해주는 Gradient Descent 기법을 설명하였습니다.
하지만 적정한 알파(σ) 값을 지정해 주어야 하고
iteration 크기도 정해 주어야 값이 구해집니다.
(이말은 적정한 알파와 이터레이션 크기를 안해주면 잘 나오지 않는다는 의미도 됩니다.)
그리하여 알파와 이터레이션을 정해주지 않아도 자동으로 새터를 구해주는 Normal equation 기법에 대해 알아 봅시다.
새터를 구하는 공식은 위와 같습니다.
함수로 구현하면
function theta = normalEquation(x, y)
theta = pinv(x' * x) * x' * y;
end
이럴경우 최소 오차가 GD와 얼마나 차이가 있을지를 확인해 보겠습니다.
다항일 경우
>> data = load('ex1data2.txt');
>> n = size(data, 2);
>> x = data(:, 1:n-1);
>> y = data(:, n);
>> m = length(x);
>> [x, mu, sigma] = meanNormalization(x);
>> x = [ones(m, 1), x]; % add x0 1
>> theta = normalEquation(x, y)
ans =
3.4041e+005
1.1063e+005
-6.6495e+003
cost function을 구해보면
>> computeCostMulti(x, y, theta)
ans = 2.0433e+009
이며 이전에 구한 값
theta =
3.4041e+005
1.1063e+005
-6.6493e+003
코스트 펑션은
ans = 2.0433e+009
와 비슷합니다.
단항일 경우 어떨지 다시 비교해보면
>> data = load('ex1data1.txt');
>> y = data(:, 2);
>> m = length(y);
>> x = [ones(m, 1), data(:,1)];
>> theta = zeros(2, 1);
>> theta = normalEquation(x, y)
theta =
-3.8958
1.1930
>>computeCost(x, y, theta)
ans = 4.4770
이전에 구한 값은
theta =
-3.6303
1.1664
ans = 4.4834
와 같이 비슷합니다.
NE 기법이 GD와 결과도 비슷하고 계산도 빠르다는 것을 볼 수 있습니다.
각각의 장단점은 아래 그림과 같습니다.
GD나 NE를 적절히 사용하라고 하네요.
'ML > octave구현 - w1' 카테고리의 다른 글
[octave] Stochastic Gradient descent (0) | 2016.03.22 |
---|---|
[octave] Multiple Variable Gradient Descent (0) | 2016.03.11 |
[octave] feature mean normalization (0) | 2016.03.10 |
[octave] multiple variable cost function (0) | 2016.03.10 |
[octave] 임의 값 예측 (0) | 2016.03.07 |