문서 초반에 설명을 못했지만 이 글을 쓰고 있는 목적은 선형회귀분석을 구하는 것을 octave를 이용하여 구하는게 목적이였습니다.
추후 스칼라를 이용하여 머신러닝을 구현하는것이 최종 Goal.
최종 골은 가장작은 Cost Function을 구하는거고 (오차율 최소화)
거기에 맞는 새터를 구하는것입니다.
(선형 회귀 분석에서 가장 잘 맞는 라인을 찾는 것 이라고 생각하면 됩니다.)
자세한 이론은 추후 설명하고
이번에는 코스트 펑션을 구하도록 구현 해보겠습니다.
식은 아래와 같습니다.
1/2m * 1 to m 까지 ((새터0 + 새터1 * x) - y)제곱 의 더하기
cost function을 구현해보면
* 데이터 로딩
>> data = load('ex1data1.txt')
* y 변수 선언
>> y = data(:, 2);
* m 변수 선언
>> m = length(y)
m = 97
: 행의 개수
* x 변수 선언
>> x = [ones(m, 1), data(:,1)];
: x변수에 첫번째 컬럼에 1값을 대입시킴
: 이유는 cost function의 h에 새터0 + 새터1 * x의 식인데 사실 새터 0에도 x를 곱해야 하는데 1이라 식에서 생략해서 그렇습니다.
x =
1.0000 6.1101
1.0000 5.5277
1.0000 8.5186
1.0000 7.0032
* 새터 선언
>> theta = zeros(2, 1);
: 0으로 초기화
theta =
0
0
* cost function 구현
function J = computeCost(x, y, theta)
m = length(y); % number of rows
J = 0;
h = 0;
for i=1:m
h = h + (theta(1) + theta(2) * x(i, 2) - y(i))^2;
end
h % print hypothesis
J = h / (2*m);
end
* cost function 호출
>> computeCost(x, y, theta)
h = 6222.1
ans = 32.073
32.073이라는 값이 리턴됩니다.
이 값을 최대한으로 줄이는 새터를 찾는게 이 프로그램의 최종 목표입니다.
'ML > octave구현 - w1' 카테고리의 다른 글
[octave] GradientDescent (0) | 2016.03.07 |
---|---|
[octave] 새터에 따른 그래프 모양 확인 (0) | 2016.03.06 |
[octave] 데이터 뿌리기 (plot) (0) | 2016.03.06 |
[octave] 파일 읽기 (0) | 2016.03.06 |
[octave] 행렬 다루기 (0) | 2016.03.05 |