이전까지는 단항(One Variable) 일 때 선형회귀분석에 대해서 알아 보았습니다.
하지만 현실에서는 단항보다는 여러개의 feature 들(Multiple Variable)로 되어 있는 문제를 많이 접하게 됩니다.
Size (feet2) | Number of bedrooms | Number of floors | Age of home (years) | Price ($1000) |
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
위와 같이 가격을 결정하는데 사이즈, 방의개수, 층수, 년식등 많은 정보들을 필요로 합니다.
이러한 문제 처럼 차례대로 각각을 x1, x2, x3, x4 라고 price를 y라고 설정한 후 단항에서와 같이 똑같이 새터를 구합니다.
다항일 때도 이전에 했던 것과 같이 이 값들을 대표하는 새터를 구하고, 임의의 값에 대한 y를 예측해 보는 것을 설명 하겠습니다.
거의 단항과 비슷하며 몇개 추가된 개념과, feature 개수에 따른 기존 로직 수정이 조금 필요 합니다.
위와 같이 다항일 때는 hypothesis가 구해지는 식입니다.
사실 x0라는 값이 존재하는데 이 값은 1이기 때문에 생략되서 새터 0만 나오는 것입니다.
다항일 경우 위와 같이 간편하게 게산할 수 있습니다. (theta transpose * x)
기존에서 x가 하나 더 추가된 새로운 데이터 셋(ex1data2.txt) 파일 입니다.
x1, x2, y 순으로 값이 되어 있으며 x1은 size, x2는 방의개수, y는 가격입니다.
2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
그럼 앞서 설명한 코스트 펑션을 Multiple variable로 확장하여 가장 작은 오차를 찾아 보겠습니다.
* cost function
J = 1/2m * 1 to m 까지 (h(x)- y)제곱 의 더하기
h = theta transpose * x
function J = computeCostMulti(x, y, theta)
m = length(y);
H = (theta' * x')'; % theta transpose * x transpose
S = sum((H - y) .^ 2);
J = S/(2*m);
end
위의 transpose 식을 이용하여 멀티 코스트 펑션을 구해 보았습니다.
참고로 transpose 는 ' 기호를 사용 합니다.
행렬 곱, 행렬 뺄셈 등을 이용하여 여러번 행렬의 트랜스포즈 해주었습니다.
>> data = load('ex1data2.txt');
>> n = size(data, 2);
>> x = data(:, 1:n-1);
>> y = data(:, n);
>> m = length(x);
>> x = [ones(m, 1), x]; % add x zero
>> theta = zeros(n, 1)
>> computeCostMulti(x, y, theta)
ans = 6.5592e+010
위와 같이 새터 [0;0;0] 일때 코스트 펑션을 구해 보았습니다.
'ML > octave구현 - w1' 카테고리의 다른 글
[octave] Multiple Variable Gradient Descent (0) | 2016.03.11 |
---|---|
[octave] feature mean normalization (0) | 2016.03.10 |
[octave] 임의 값 예측 (0) | 2016.03.07 |
[octave] GradientDescent (0) | 2016.03.07 |
[octave] 새터에 따른 그래프 모양 확인 (0) | 2016.03.06 |