3-1 Classification and Representation 본문
분류 문제를 풀기 위한 Logistic Regression 알고리즘에 대해 알아본다.
이메일이 스팸인지 아닌지, 온라인 거래 시 사기인지 아닌지, 종양이 악성인지 아닌지 등 0 또는 1처럼 둘 중 하나의 값을 가지는 변수 y를 예측하는 문제는 classification으로 푸는 문제이다. 우선은 binary classification만 다루도록 한다.
종양의 크기에 따라 이 종양이 악성인지 양성인지 분류하기 위한 data set이 있다. (여기선 양성은 0, 악성은 1을 의미함)
회귀문제를 풀기 위해 선형회귀 알고리즘을 사용했던 것처럼 일단 직선을 그어보자
즉 우리가 할 수 있는 건 가설 h(x)의 결과값이 0.5가 되는 지점에서 수직으로 경계선을 긋는 것이다.
그래서 그 지점보다 size가 작으면 양성, size가 크면 악성으로 판단할 수 있겠다.
이것만 보면 선형회귀를 적용했을 때 분류도 잘 풀 수 있는 것 같다.
만약 train data가 더 들어왔다고 하면 가설 h(x)를 추가된 데이터도 잘 반영할 수 있게 할 것이다. 그래서 파란색 직선을 얻었다.
그러나 파란색 모델에서 y가 0.5가 되는 지점에서 경계선을 그어보면 분류가 제대로 되지 않는 문제가 생긴다.
따라서 classification을 풀 때 선형회귀를 사용하는 것은 좋은 방법이 아니다.
선형회귀로 classification을 풀려고 하면 이러한 문제 역시 생길 수 있다.
우리는 y값의 label을 0 혹은 1로 설정하였다. 그런데 가설 h(x)의 결과값이 1보다 매우 크거나 0보다 매우 작을 수 있기 때문에 문제가 될 수 있다.
따라서 분류 문제를 풀기위해 Logistic Regression 알고리즘을 사용한다.
Logistic regression은 예측 값이 항상 0에서 1 사이로 출력되기 때문에 이 범위를 벗어나는 값을 가질 수 없다.
Classification 문제를 풀기위해 Logistic regression을 사용한다고 했다. 이러한 알고리즘을 사용하면 우리는 가설 h(x)의 값을 0과 1사이의 값으로 출력할 수 있다.
이전에 선형회귀를 공부할 때 h(x)를 θ의 전치행렬과 X의 곱으로 나타냈었다.
로지스틱 회귀에서는 이를 조금 변형한다.
1/(1+ e^-z)라는 g(z)함수를 사용하여 이와 같이 변경한다. 이러한 함수를 시그모이드 또는 로지스틱 함수라고 하며 이름은 다르지만 같은 함수를 나타낸다고 보면 된다.
이렇게 θ'*X와 g(z)를 합하여 오른쪽 위의 로지스틱 함수를 만들 수 있다.
로지스틱 함수는 입력이 0일 때 0.5를 갖고 입력이 무한대로 1로, 음의 무한대로 갈수록 0으로 수렴한다.
이렇게 새롭게 정의한 가설을 통해서 파라미터들을 데이터에 맞게 맞춰 예측한다.
가설 h(x)와 그 결과값에 대해 알아보자
h(x)란 input x가 들어왔을 때 y가 1이 될 확률을 의미한다.
예제에서 보는 것처럼 (x_0는 항상 1) 어떤 feature 벡터 x가 입력으로 주어졌을 때 그 결과 값이 0.7이라는 것은 이 종양이 악성일 확률이 0.7이다라고 말할 수 있다.
이 가설의 결과값을 다시 해석해보면 입력 x가 파라미터 θ에서 y=1일 확률로 해석할 수 있다.
우리는 분류 문제를 풀기 때문에 y가 0 아니면 1만 존재한다. 그리고 확률이기 때문에 y가 0일 확률도 구할 수 있다.
Logistic regression은 이러한 로지스틱 함수를 만들어서 가설 h(x)의 결과값이 0.5이상이면 y=1, 0.5미만이면 y=0으로 분류하였다.
g(z) >= 0.5는 z >= 0 인 것과 같다.
h(x) >= 0.5는 θ'X >=0 다시 말해 z가 0 >= 인 것과 같다.
이제 이러한 트레이닝 셋이 있고 가설 h(x)를 이렇게 설정했다고 해보자
(파라미터를 어떻게 모델에 fit할 것인지는 다음에 배우고 일단은 이렇게 있다고 가정함)
그러면 우리의 파라미터 θ 벡터는 -3, 1, 1을 원소로 하는 3차원 벡터가 된다.
따라서 -3 + x_1 + x_2 값이 0 이상이라면 y=1이라고 predict할 수 있다.
여기서 상수 -3을 우변으로 넘기면 x_1 + x_2 >= 3이 된다. 이 식 역시 이러한 조건을 만족할 때 y=1이라고 할 수 있다.
이 의미를 그래프에서 나타내면 위와 같은 분홍색 직선을 그릴 수 있다. 그리고 이 직선으로 인해 오른쪽 영역은 y=1, 왼쪽 영역은 y=0으로 분류가 된다. 이러한 선을 decision boundary라고 한다.
이번에는 좀 더 복잡한 예제를 보자. 트레이닝 셋이 다음과 같다.
어떻게 하면 로지스틱 회귀를 이용해서 데이터를 잘 분류할 수 있을까?
우리가 이전에 선형회귀를 다룰 때, 복잡한 데이터를 잘 표현하기 위해서 다항회귀를 사용하였다. 로지스틱 회귀도 이와 같다.
그래서 두 개의 feature x_1^2, x_2^2를 추가해서 가설 h(x)를 만들었다고 해보자.
파라미터 θ의 값은 -1, 0, 0, 1, 1이다. (파라미터를 선택하고 업데이트하는 것은 나중에 배울 것임)
따라서 이 파리미터 값을 적용한 우리의 가설 h(x)는 -1 + x_1^2 + x_2^2 >=0을 만족하면 y=1이라고 predict하게 된다.
이전에 했던 것과 마찬가지로 상수를 우변으로 이동하면 반지름이 1인 원이 decision boundary가 된다.
그리고 이 원을 그려보면 데이터를 잘 분류하는 것을 확인할 수 있다.
이러한 방법을 사용하면 decision boundary가 직선이 아닌 형태로도 데이터를 잘 분류할 수 있다.
중요한 것은 decision boundary는 트레이닝 데이터셋의 특성을 반영한 게 아니라 가설 h의 파라미터의 특성을 반영한 것이다.
다시 말해, 파라미터 θ가 decision boundary를 정의하는 것이지 training set이 정의하는 게 아니다.
data가 어찌됐든 이러한 방법을 통해 우리는 더 복잡한 모양의 decision boundary를 만들어 데이터를 잘 분류할 수 있다.
'ML & DL > Coursera-ML' 카테고리의 다른 글
3-3 Multiclass Classification (0) | 2019.01.10 |
---|---|
3-2 Logistic Regression Model (0) | 2019.01.09 |
2-2 Computing Parameters Analytically (0) | 2019.01.08 |
2-1 Multivariate Linear Regression (0) | 2019.01.08 |
1-3 Parameter Learning: Gradient Descent (0) | 2019.01.06 |