이전까지는 단항(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] 일때 코스트 펑션을 구해 보았습니다.


+ Recent posts