우리의 목표는 cost function값이 최소가 되는 새터를 찾는다고 하였습다.
먼저 새터를 찾는다는 것이 무엇인지 확인해 볼 필요가 있을 것 같습니다.
앞서 plot을 통해 x, y를 표시하던 그래프에 cost function으로 오차율을 나타내고
실제 새터를 그래프로 그려보면서 수동으로 새터를 찾아 보겠습니다.
먼저 새터를 그리는 함수부터 정의해봅니다.
* 새터를 표시하는 plot 함수
function plotManualTheta(x, y, theta)
plot(x(:,2) , y, 'rx', 'MarkerSize', 5); % first plot
hold on; % keep previous plot visible
plot(x(:,2), x*theta, '-') % second plot
legend('Training data', 'Linear regression') % legend
hold off % don't overlay any more plots on this figure
end
: hold on - plot을 고정 시키는 명령어
: legend - 범례
: hold off - plot 고정 해제
: plot(x(:,2), x*theta, '-')
- 두번째 plot을 그리는 x, y 데이터 입니다.
- 여기서 두번째 파라미터에는 x와 theta에서 들어온 값을 곱해 줍니다.
- 행렬 곱을 이용하여 x = 1 * 2, y = 2 * 1 행렬을 곱하여 1*1행렬로 계산하여 그래프를 표시 합니다.
예제를 통해 알아 보겠습니다.
>> data = load('ex1data1.txt');
>> y = data(:, 2);
>> m = length(y);
>> x = [ones(m, 1), data(:,1)];
>> theta = zeros(2, 1);
* 새터가 0,0 일때
>> computeCost(x, y, theta)
h = 6222.1
ans = 32.073
>> plotManualTheta(x, y, theta)
* 새터가 0, 1일때
>> theta = [0; 1]
>> computeCost(x, y, theta)
h = 1444.5
ans = 7.4459
>> plotManualTheta(x, y, theta)
위와 같이 계속 하다 보면 최적의 새터를 찾을 수 있습니다.
'ML > octave구현 - w1' 카테고리의 다른 글
[octave] 임의 값 예측 (0) | 2016.03.07 |
---|---|
[octave] GradientDescent (0) | 2016.03.07 |
[octave] Cost Function 구하기 (0) | 2016.03.06 |
[octave] 데이터 뿌리기 (plot) (0) | 2016.03.06 |
[octave] 파일 읽기 (0) | 2016.03.06 |