uncategorized

Machine Learing - Coursera(week2)

multivariate Linear regression

지금까지 feature가 하나인 linear regression문제를 풀었고, 이제 feature가 여러개일때에 linear regression 문제를 풀어보도록 한다.

coursera_ML_week2_multiple_feature

가설함수 h(x)는 위와 같이 나타낼 수 있고, 이때 x0 = 1이라고 정하면 벡터 X와 벡터 세타는 위와 같이 정의할 수 있고, h(x)는 간단하게 “세타 transpose X”로 표현 할 수 있다.

이제 multivariate linear regression의 cost function에 대해서 알아보자.

coursera_ML_week2_gd_for_multiple_variable

위와 같은 식으로 나타나게 되고,

n=1일때와는, 세타0일때 x0(i)를 곱해주고, 세타1일때 x1(i)를 곱해주는 것만 다르다. (그부분은 편미분 적용하는 식이니까)

feature scailing

coursera_ML_week2_feature_scaling

x1 과 x2이 가지는 값의 범위차가 크면 위의 왼쪽 그래프와 같은 contour plot 이 나올 수가있다. 그럴 경우에 그림에서 보듯 gradient descent가 어디로 내려갈지를 제대로 찾지 못하고 이쪽 저쪽 내려가며 헤매는 경우를 겪을 수 있는데 이를 해소하기 위하여 feature scaling이라는 방법을 쓰는데 오른쪽과 같이

각 범위의 최대값으로 나눠줘서

x1, x2를 0과 1사이의 값으로 만들어주면 contour plot이 오른쪽과 같이 된다.

coursera_ML_week2_feature_scaling

위와 같이 모든 feature가 대략 -1에서 1사이의 값을 가지도록 설정을 해야 gradient descent algorithm이 잘 돌아간다. 위 그림에서 x표로 표시한 feature 처럼 값의 범위가 너무 벗어나 있으면 feature scaling을 통해 값을 조정하자.

feature scaling - mean normalization

feature scaling의 한 방법으로 mean normalization이라는 것을 쓸수가 있는데,

coursera_ML_week2_feature_scaling

위와 같이

x1에 (x -u1) / s1 을 하는 것이다. (x2, x3도 같은…식으로)

u1 : train set 에 있는 x1의 평균값

s1 : max - min (범위), or 분산(standard deviation)을 써도 된다.

learning rate

coursera_ML_week2_learning_rate

위 왼쪽 그래프의 x축은 gradient descent algorithm 반복횟수 (No. of iteration)

y축은 cost function J의 값이다.

cost function J는 계속 해서 감소하지만 어느 순간(300~ 400 반복사이)부터 거의 감소하지 않고 일정한 수준을 유지하게 된다.

그래서 주로 왼쪽처럼 그래프를 그려서 converge 하는지 확인하는데,

이를 자동화할 수 있는 방법으로 작은 epsilon 값을 하나 정해서 각 iteration마다 정한 epsilon 값보다 떨어지면 converge했다고 정할 수 있다.

그런데, 이 epsilon 값도 정하기가 어려우므로 보통 왼쪽의 그래프를 그려서 확인하는 방법을 쓴다.

coursera_ML_week2_learning_rate

cost function J가 왼쪽 그래프와 같다면 learning rate가 크다는 얘기이고, 오른쪽 그래프처럼 세타값이 업데이트 되면서 발산하게 된다 이럴때는 alpha값을 더 작게 해준다.

alpha 값이 너무 작으면 gradient descent가 너무 느리므로 적절한 값을 넣어주는 것이 중요하다.

Andrew Ng 교수가 할때는

0.001, 0.003, 0.01 , 0.03 , 0.1 , 0.3, 1

이렇게 약 3배정도씩 증가시키면서, 가장 큰 learning rate의 가장 작은 값과 큰 값을 얻은 다음에

가장 큰값을 선택하거나 가장 큰값보다 약간 작은값을 learning rate로 선정한다고 한다.

features and polynomial regression

때로는 feature간의 연산으로 하나의 feature를 만들어서 사용할수 있다. 다음 예를 보자.

coursera_ML_week2_feature_polynomial1

위와 같이 집값을 예측하는 모델을 만든다고 할 때에, 대지의 가로 세로를 각각 feature로 사용하는 것보다 단순하게 area = 가로 * 세로 로 사용할 수 있다.

coursera_ML_week2_feature_polynomial1

그렇게 feature를 하나로 한정시키고 이에 대한 h(x)를 위와 같이 3차함수로 설정하자. 2차함수로 설정시 올라갔다가 다시 내려오는 형태가 되므로 3차함수로 정했다.

3차 함수는 왼쪽 아래처럼 나오게 되므로 각 항의 값 범위(size, size제곱, size세제곱)가 크므로 feature scaling을 통해 gradient descent가 잘 돌아가도록 해야한다.

3차 함수로 하지않고 루트 함수로 가설함수를 세우면 train data에 더 fit하게 할 수 있다.

feature를 우리가 정하지않고 data를 보고 자동적으로 feautre를 select 할수 있는 알고리즘도 있는데, 그것은 다음에 배우도록 한다. 여기서는 다항함수나, 루트함수등으로 데이터를 표현할 수도 있다는 것을 살펴보았다.

Share