머신 러닝

[머신러닝 코세라 강의] (3주차) "로지스틱 회귀" Machine Learning (by Andrew Ng)

마빈 Marvin 2022. 5. 30. 21:37

 

3주차에는 classification 문제에 대해서 다룹니다. 쉬운 예로, 어떤 이메일이 도착했을 때, 특정 문장이나 각종 특징 (x)을 가진 이메일이 스팸이거나 (y=1) 그렇지 않거나 (y=1) 를 분류하는 문제입니다. 이전 시간에 배웠던 linear regression 은 outcome 이 0 미만이거나 1 초과의 값도 가질 수 있는 문제가 있습니다. 이를 해결할 logistic regression 을 배웁니다. 추가적으로, 이번 주차에서는 overfitting 문제에 대해서도 다룹니다. 

 

관련 ipython 코드는 구글 colab 에 담아두었습니다. 

 

로지스틱 함수

 

로지스틱 함수를 이용해 가설을 표현합니다. $h_{\theta} (x)$ 는 output 이 1이 나올 확률입니다. 

 

$$h_{\theta} (x) = g ( \theta^T x )$$ 는

$g(z) = \frac{1}{1+e^{-z}}$에

$z = \theta^T x$ 을 입력한 형태입니다.

 

$h_{\theta} (x) = P (y = 1 | x ; \theta ) = 1 - P ( y = 0 | x, \theta) $

 

Decision Boundary

DGP (Data Generating Process)

 

$y = 1 \text{ if } x_1 + x_2 > 5$ 의 decision boundary 를 이용해서 DGP 를 만들어보았습니다. 

# DGP
n2 = 1000
x1 = np.random.uniform(0,5,n2)
x2 = np.random.uniform(0,5,n2)
e = np.random.normal(0,1,n2)
y = (-5+x1+x2+e>=0).astype(int)

cm = plt.cm.get_cmap('Spectral')
plt.scatter(x1, x2, c=y, cmap=cm)
plt.show()

가로축은 x_1, 세로축은 x_2

$y = 1 \text{ if } x_1^2 + x_2^2 >= 2$ 의 decision boundary 를 이용해서 DGP 를 만들어보았습니다. 원의 형태입니다. 

 

# DGP
n2 = 1000
x1 = np.random.uniform(-4,4,n2)
x2 = np.random.uniform(-4,4,n2)
e = np.random.normal(0,1,n2)
y = (-4+x1**2+x2**2+e>=0).astype(int)

cm = plt.cm.get_cmap('Spectral')
plt.scatter(x1, x2, c=y, cmap=cm)
plt.show()

가로축은 x_1, 세로축은 x_2

 

추후에는 gradient descent 식을 이용해서 위의 파라미터 값들을 직접 추정해보아야 겠습니다. Coursera 강좌의 프로그래밍 과제에서는 옥타브 또는 매트랩으로 과제를 수행하는데, 저는 매트랩으로 수행하였습니다. 

 

[ ] Google Co-lab 의 ipython 에서 gradient descent (and cost function if necessary) 구하기 

     - Note: Matlab ex2 의 python 버젼이라 생각해보자.