머신 러닝

[머신러닝 코세라 강의] (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θ(x) 는 output 이 1이 나올 확률입니다. 

 

hθ(x)=g(θTx)

g(z)=11+ez

z=θTx 을 입력한 형태입니다.

 

hθ(x)=P(y=1|x;θ)=1P(y=0|x,θ)

 

Decision Boundary

DGP (Data Generating Process)

 

y=1 if x1+x2>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 if x12+x22>=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 버젼이라 생각해보자.